0

./lib在发布到 npm 之前,我编写了一些构建目录的 npm 脚本。
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'); 
4

1 回答 1

1

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

npm 脚本

replace向您的脚本添加package.json如下:

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

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

...
"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/.

于 2017-06-05T10:09:53.713 回答