px2rem.js
2.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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);
}
});