PC/node_modules/px2rem/bin/px2rem.js
2026-01-26 23:20:48 +08:00

87 lines
2.7 KiB
JavaScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 typethanks 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);
}
});