我目前正在将代码库从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。
答案 0 :(得分:3)
我已通过遵循this评论来解决此问题。
解决方案是:
.babelrc
移至babel.config.js
并使其成为CommonJS模块--ignore=node_modules
时添加babel-node
这似乎仍然很hacky,Babel似乎不承认ignore
中的babel.config.js
属性,必须必须指定为标志。
Babel 7似乎仅允许在babel配置所在目录中进行导入,但是显式设置--ignore
标志将对此进行覆盖。
您可以查看我的working demo和diff我所做的更改以使其正常工作。
issue仍在GitHub上开放,因此将来可能会有更好的解决方案。
答案 1 :(得分:1)
在导入外部目录中的文件时,当前目录' .babelrc
无法加载,您可以在该目录中放置.babelrc
并按相对设置presets
路径(而不是短名称):
{" presets":[" .. \ pad \ node_modules \ babel-preset-env"], " retainLines":true}