Node.js 巴别塔7中的外部进口不会被运输

Node.js 巴别塔7中的外部进口不会被运输,node.js,babeljs,Node.js,Babeljs,我目前正在将一个代码库从Babel6迁移到7。代码由多个单独的项目组成,这些项目有自己的配置 main项目从external导入文件,但是由main从external导入的脚本没有被传输,并且在“意外令牌导入”时失败。直接位于main中的脚本可以正确传输 我在main项目中使用以下命令来传输脚本: babel-node ./index.js 另一个项目使用Webpack做同样的事情,并正确处理所有事情 这种设置也适用于巴别塔6 .babelrc用于main { "ignore": [

我目前正在将一个代码库从Babel6迁移到7。代码由多个单独的项目组成,这些项目有自己的配置

main
项目从
external
导入文件,但是由
main
external
导入的脚本没有被传输,并且在“意外令牌导入”时失败。直接位于
main
中的脚本可以正确传输

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

babel-node ./index.js
另一个项目使用Webpack做同样的事情,并正确处理所有事情

这种设置也适用于巴别塔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
用于
外部

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

我在以下位置创建了一个示例来详细说明我的问题:



TL;DR我正试图从项目根目录外部导入脚本,但它们不会被Babel传输,项目内部的脚本会进行传输。

当前目录的
。在外部目录中导入文件时,不会加载babelrc
,您可以在该目录中放置
.babelrc
,并通过相对路径(而不是短名称)设置其
预设值

{“预设”:[“.\pad\node\u modules\babel preset env”], “保留行”:true}


我已经通过以下评论解决了这个问题

解决办法是:

  • 将主项目中的
    .babelrc
    移动到
    babel.config.js
    并使其成为CommonJS模块
  • 从主项目运行
    babel节点时添加
    --ignore=node\u模块
  • 这看起来仍然很粗糙,巴贝尔似乎不承认
    Babel.config.js
    it中的
    ignore
    属性必须指定为标志

    Babel 7似乎只允许在Babel配置所在的目录中进行导入,但是显式设置
    --ignore
    标志会覆盖此选项

    您可以查看我的以及为使其正常工作而更改的内容


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

    您的
    babel loader
    的网页配置是什么?@loganfsmyth感谢您的回复。这不是用于Webpack的,它只是使用了
    babel node./index.js
    ,正如在《Oh gotcha》中看到的,我读得太快了:P@nerdyman你解决了这个问题吗?我也有同样的问题。@TonyT不幸的是没有——尽管我已经一个月左右没有看了。我在巴别塔松懈报上发了帖子,但他们被难住了。我现在坚持使用巴别塔6。你能详细说明一下它是如何工作的吗?我不确定这是否解决了我的问题,目标是使每个项目自治,仅使用别名导入。@nerdyman如果外部目录中的文件包含es6代码,则在导入时应进行翻译,但如果该目录中没有.babelrc,则翻译将失败。由于该目录只是一个普通的代码持有者,而不是一个
    项目
    (没有package.json,没有node_模块),即使我们将相同的.babelrc(在根目录中使用)放在那里,也不会加载babel插件。因此,放一个特殊的.babelrc和路径引用的插件,babel加载程序将在根目录中找到它们并正确地进行翻译。我不认为这是这里的问题,external是它自己的项目,有自己的package.json和.babelrc,如图所示。是的,我可以在babel6中运行您的示例,但在babel7中不起作用。对于NextJS,除了“next/babel”之外,不需要任何其他预设。我缺少的神奇来源是--ignore=node_模块-谢谢。