【问题标题】:babel-plugin-root-import with babel 7babel-plugin-root-import 与 babel 7
【发布时间】:2018-06-28 02:23:47
【问题描述】:

我正在尝试设置 Babel 7。以前从未使用过 Babel,所以我真的是从头开始。我已经成功地安装和使用了@babel/plugin-proposal-optional-chaining,但我正在努力使用babel-plugin-root-import

这是我的 package.json

//package.json

"scripts": {
  "start": "nodemon src/index.js --exec babel-node"
},
"devDependencies": {
  "@babel/cli": "^7.0.0-beta.51",
  "@babel/core": "^7.0.0-beta.51",
  "@babel/node": "^7.0.0-beta.51",
  "@babel/preset-env": "^7.0.0-beta.51"
},
"dependencies": {
  "@babel/plugin-proposal-optional-chaining": "^7.0.0-beta.51",
  "@babel/polyfill": "^7.0.0-beta.51",
  "babel-plugin-root-import": "^6.1.0"
}


//babel.config.js

module.exports = {
  "presets": ["@babel/preset-env"],
  "plugins": [
    ["@babel/plugin-proposal-optional-chaining"],
    ["babel-plugin-root-import",{
      "rootPathPrefix": "@"
    }]
  ]
};

下面是我的代码:

//src/index.js

require("./foo/index.js")();

//src/foo/index.js

module.exports = function() {
  console.log("Foo loaded")
}

当我执行上面的代码时,我在控制台中得到Foo loaded

当我使用以下内容更改 src/index.js 时:

//src/index.js

require("@/foo/index.js")();

我收到以下错误:

internal/modules/cjs/loader.js:596
    throw err;
    ^

Error: Cannot find module '../foo/index.js'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:594:15)
    at Function.Module._load (internal/modules/cjs/loader.js:520:25)
    at Module.require (internal/modules/cjs/loader.js:650:17)
    at require (internal/modules/cjs/helpers.js:20:18)
    at Object.<anonymous> (C:\Node.js\dev\babel7\src/index.js:2:1)
    at Module._compile (internal/modules/cjs/loader.js:702:30)
    at Module._compile (C:\Node.js\dev\babel7\node_modules\pirates\lib\index.js:91:24)
    at Module._extensions..js (internal/modules/cjs/loader.js:713:10)
    at Object.newLoader [as .js] (C:\Node.js\dev\babel7\node_modules\pirates\lib\index.js:96:7)
    at Module.load (internal/modules/cjs/loader.js:612:32)
[nodemon] app crashed - waiting for file changes before starting...

如果我没有在 babel.config.js 中设置 rootPathPrefix,我也不能使用路径以 ~ 开头的插件,这应该是默认值。 怎么了?

非常感谢!

【问题讨论】:

  • 我相信“当我改变时”部分是指require("@/foo/index.js")();。这是我在下面答案中的假设。
  • 你是对的,这是一个错字:) 我已经更正了这个问题。
  • 看看babel-plugin-module-resolver,它提供的配置选项可以让你例如将root 设置为. 并将别名@ 设置为./src,您最终无需输入@/src
  • 感谢您的提示,我会看看这个插件,尽管在接受的答案的帮助下我完全实现了我所需要的。

标签: javascript node.js babeljs


【解决方案1】:

如果你直接用npx babel src/index.js运行babel-cli只是为了检查输出,你会发现根导入插件正在正确更改:

require("@/foo/index.js")();

进入:

require("../foo/index.js")();

@(项目根目录)在index.js 文件中在 src 文件夹中被正确替换为..

如果您希望@ 引用root/src,您可以设置"rootPathSuffix": "src" 选项。如果没有该选项,您将不得不这样做:

require("@/src/foo/index.js")();

【讨论】:

  • 确实,我忽略了文档中的后缀章节。现在可以了。感谢您的帮助!
猜你喜欢
  • 2020-11-25
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-27
  • 1970-01-01
相关资源
最近更新 更多