Babel 7中的外部进口不会被转化

时间:2018-02-28 15:30:54

标签: node.js babeljs

我目前正在将代码库从Babel 6迁移到7.代码由多个具有自己配置的单个项目组成。

main项目从external导入文件但是external main导入的脚本未被编译并且未通过"意外令牌导入"。直接位于main 的脚本正确转换。

我在main项目中使用以下命令来传输脚本:

babel-node ./index.js

另一个项目使用Webpack做同样的事情并正确处理所有事情。

此设置也适用于Babel 6。

.babelrc

main

{
"ignore": [
    "node_modules"
],
"presets": [
    ["@babel/preset-env", {
        "targets": {
            "node": "current"
        },
        "useBuiltIns": "entry"
    }]
],
"plugins": [
    [
        "module-resolver", {
            "alias": {
                "External": "../external"
            }
        }
    ],
    "@babel/plugin-proposal-decorators",
    "@babel/plugin-proposal-object-rest-spread",
    "@babel/plugin-proposal-export-default-from",
    "@babel/plugin-proposal-export-namespace-from",
    "@babel/plugin-proposal-class-properties"
]}
.babelrc

external

{
"presets": [
    "@babel/preset-react"
],
"plugins": [
    "@babel/plugin-proposal-class-properties",
    "@babel/plugin-proposal-object-rest-spread",
    "@babel/plugin-transform-runtime"
]}

我已经创建了一个示例来详细说明我的问题:

https://gitlab.com/nerdyman/babel-7-external-import-broken

TL; DR我尝试从项目的根目录之外导入脚本,但它们不会被Babel编译,项目中的脚本执行 transpile。

2 个答案:

答案 0 :(得分:3)

我已通过遵循this评论来解决此问题。

解决方案是:

  1. 将主项目中的.babelrc移至babel.config.js并使其成为CommonJS模块
  2. 从主项目运行--ignore=node_modules时添加babel-node

这似乎仍然很hacky,Babel似乎不承认ignore中的babel.config.js属性,必须必须指定为标志。

Babel 7似乎仅允许在babel配置所在目录中进行导入,但是显式设置--ignore标志将对此进行覆盖。

您可以查看我的working demodiff我所做的更改以使其正常工作。

issue仍在GitHub上开放,因此将来可能会有更好的解决方案。

答案 1 :(得分:1)

在导入外部目录中的文件时,当前目录' .babelrc无法加载,您可以在该目录中放置.babelrc并按相对设置presets路径(而不是短名称):

  

{" presets":[" .. \ pad \ node_modules \ babel-preset-env"],     " retainLines":true}