【问题标题】:babel es5 to es6 converting less extension to css on importsbabel es5 到 es6 在导入时将较少的扩展转换为 css
【发布时间】:2017-11-05 04:59:46
【问题描述】:

在发布到 npm 之前,我编写了一些构建 ./lib 目录的 npm 脚本。
1.脚本负责将./src/components/中的所有es6*.js文件转换为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"

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

import css from './styles.less';

转换成这个:

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

但我希望它转换成这个:

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

【问题讨论】:

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


    【解决方案1】:

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

    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 文件夹中。如果不是,则需要将replace 脚本中的./lib/components/ 部分更改为./lib/

    【讨论】:

    • 谢谢您,这似乎是一个不错的解决方案,并且在我进行的一些小测试中效果很好。这个解决方案的重要部分是我也可以以编程方式使用它npmjs.com/package/replace#programmatic-usage
    猜你喜欢
    • 2020-05-29
    • 2018-06-29
    • 2017-08-07
    • 1970-01-01
    • 2021-12-18
    • 2016-02-28
    • 2022-01-01
    • 2017-06-15
    • 1970-01-01
    相关资源
    最近更新 更多