babel es5到es6在导入时将较少的扩展名转换为css

时间:2017-06-04 07:17:11

标签: javascript node.js reactjs babel npm-scripts

我写了一些npm脚本,在发布到npm之前构建./lib目录 1.脚本负责将es6中的所有*.js ./src/components/个文件转换为es5语法,然后将文件复制到./lib(相同结构)。 /> 这是脚本:

"cross-env NODE_ENV=production babel ./src/components --out-dir ./lib --ignore spec.js --copy-files"

这是.babelrc文件:

{
  "presets": [
    "react",
    "stage-1"
  ],
  "env": {
    "development": {
      "presets": [
        "latest",
        "react-hmre"
      ]
    },
    "production": {
      "presets": [
        [
          "latest",
          "es2015"
        ]
      ],
      "plugins": [
        "transform-react-constant-elements",
        "transform-react-remove-prop-types",
        [
          "transform-imports",
          {
            "react-bootstrap": {
              "transform": "react-bootstrap/lib/${member}",
              "preventFullImport": true
            },
            "lodash": {
              "transform": "lodash/${member}",
              "preventFullImport": true
            }
          }
        ]
      ]
    },
    "test": {
      "presets": [
        "latest"
      ]
    }
  }
}

我有另一个脚本负责将.less文件转换为.css并将其复制到./lib(相同结构):

"lessc-glob ./src/components/**/*.less lib"

一切都按预期运作良好,但我现在有一个问题。我import文件中的.js指的是.less个文件,但我需要将其更改为.css个扩展名。
为了清楚起见, 我现在拥有的是:

import css from './styles.less';

转换为:

var _styles = require('./styles.less'); 

但我希望它转换为:

var _styles = require('./styles.css'); 

1 个答案:

答案 0 :(得分:1)

replace可以安装并用于查找 .less 的实例,并在生成的ES5 .js文件中用 .css 替换它们第

npm脚本

replace脚本添加到package.json,如下所示:

...
"scripts": {
  ...
  "replace": "replace \".less\" \".css\" ./lib/components/ -r --include=\"*.js\""
},
...

然后可以将对replace脚本的调用链接到负责转换所有es6 *.js文件的脚本的末尾。 E.g。

...
"scripts": {
  ...
  "quux": "cross-env NODE_ENV=production babel ./src/components --out-dir ./lib --ignore spec.js --copy-files && npm run replace",
  "replace": "replace \".less\" \".css\" ./lib/components/ -r --include=\"*.js\""
  ...
},
...

请注意 && npm run replace 部分已添加到当前quux脚本的末尾。

我假设components文件夹也被复制到lib文件夹。如果不是,那么./lib/components/脚本中的replace部分将需要更改为./lib/