Blame view

node_modules/px2rem/bin/px2rem.js 2.74 KB
2a09d1a4   liuqimichale   添加宜春 天水 宣化
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);
    }
  });