chushihua
This commit is contained in:
+86
@@ -0,0 +1,86 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
var program = require('commander');
|
||||
var pkg = require('../package.json');
|
||||
var Px2rem = require('../index');
|
||||
var chalk = require('chalk');
|
||||
var path = require('path');
|
||||
var fs = require('fs-extra');
|
||||
|
||||
|
||||
// string to variables of proper type(thanks to zepto)
|
||||
function deserializeValue(value) {
|
||||
var num;
|
||||
try {
|
||||
return value ?
|
||||
value == "true" || value == true ||
|
||||
(value == "false" || value == false ? false :
|
||||
value == "null" ? null :
|
||||
!/^0/.test(value) && !isNaN(num = Number(value)) ? num :
|
||||
/^[\[\{]/.test(value) ? JSON.parse(value) :
|
||||
value)
|
||||
: value;
|
||||
} catch (e) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
function saveFile(filePath, content) {
|
||||
fs.createFileSync(filePath);
|
||||
fs.writeFileSync(filePath, content, {encoding: 'utf8'});
|
||||
console.log(chalk.green.bold('[Success]: ') + filePath);
|
||||
}
|
||||
|
||||
|
||||
program.version(pkg.version)
|
||||
.option('-u, --remUnit [value]', 'set `rem` unit value (default: 75)', 75)
|
||||
.option('-x, --threeVersion [value]', 'whether to generate @1x, @2x and @3x version stylesheet (default: false)', false)
|
||||
.option('-r, --remVersion [value]', 'whether to generate rem version stylesheet (default: true)', true)
|
||||
.option('-b, --baseDpr [value]', 'set base device pixel ratio (default: 2)', 2)
|
||||
.option('-p, --remPrecision [value]', 'set rem value precision (default: 6)', 6)
|
||||
.option('-o, --output [path]', 'the output file dirname')
|
||||
.parse(process.argv);
|
||||
|
||||
if (!program.args.length) {
|
||||
console.log(chalk.yellow.bold('[Info]: ') + 'No files to process!');
|
||||
return false;
|
||||
}
|
||||
|
||||
var config = {
|
||||
remUnit: deserializeValue(program.remUnit),
|
||||
threeVersion: deserializeValue(program.threeVersion),
|
||||
remVersion: deserializeValue(program.remVersion),
|
||||
baseDpr: deserializeValue(program.baseDpr),
|
||||
remPrecision: deserializeValue(program.remPrecision)
|
||||
};
|
||||
|
||||
var px2remIns = new Px2rem(config);
|
||||
|
||||
program.args.forEach(function (filePath) {
|
||||
|
||||
if (path.extname(filePath) !== '.css') {
|
||||
return;
|
||||
}
|
||||
|
||||
var cssText = fs.readFileSync(filePath, {encoding: 'utf8'});
|
||||
var outputPath = program.output || path.dirname(filePath);
|
||||
var fileName = path.basename(filePath);
|
||||
|
||||
// generate @1x, @2x and @3x version stylesheet
|
||||
if (config.threeVersion) {
|
||||
for (var dpr = 1; dpr <= 3; dpr++) {
|
||||
var newCssText = px2remIns.generateThree(cssText, dpr);
|
||||
var newFileName = fileName.replace(/(.debug)?.css/, dpr + 'x.debug.css');
|
||||
var newFilepath = path.join(outputPath, newFileName);
|
||||
saveFile(newFilepath, newCssText);
|
||||
}
|
||||
}
|
||||
|
||||
// generate rem version stylesheet
|
||||
if (config.remVersion) {
|
||||
var newCssText = px2remIns.generateRem(cssText);
|
||||
var newFileName = fileName.replace(/(.debug)?.css/, '.debug.css');
|
||||
var newFilepath = path.join(outputPath, newFileName);
|
||||
saveFile(newFilepath, newCssText);
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user