Babel编译的JS无法导入相对路径

时间:2016-02-05 08:15:07

标签: javascript node.js babeljs

我有一个npm包,我在ES2015中编写并使用Babel 6进行转换.ES2015源代码位于/src,分为/src/core/src/commands中的模块, 等等。由于它是CLI工具,因此入口点位于/src/bin/app.js。如果我运行babel-node src/bin/app.js,它会按预期运行。

理想情况下,我想全局安装此工具(例如grunt-cli),因此我将整个包转换为带有babel src -o /lib/app.js的单个有效JS(ES5)文件。但是,如果我尝试运行该文件,则会尝试从相对路径中请求模块时出错,并且无法找到这些模块,因为它们都合并到app.js中。错误是:

$ node_modules/babel-cli/bin/babel-node.js lib/app
module.js:328
    throw err;
    ^

Error: Cannot find module '../commands/index'
    at Function.Module._resolveFilename (module.js:326:15)
    at Function.Module._load (module.js:277:25)
    at Module.require (module.js:354:17)
    at require (internal/module.js:12:17)
    at Object.<anonymous> (/usr/local/lib/node_modules/app/lib/app.js:19:14)
    at Module._compile (module.js:398:26)
    at Module._extensions..js (module.js:405:10)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/me/dev/app/node_modules/babel-register/lib/node.js:138:7)
    at Module.load (module.js:344:32)
    at Function.Module._load (module.js:301:12)

我的.babelrc只是:

{
  "presets": ["es2015"]
}

这应该可行,还是我需要更多配置Babel?备份计划只是将整个/src文件夹转换为/lib并发布所有内容,但单个文件会更好。

1 个答案:

答案 0 :(得分:2)

结果Babel doesn't support this at the moment。它只是将文件连接在一起,因此相对路径导入将不起作用。

解决方案是使用带有RollupBabel plugin,而不是将Babel与路径解析插件一起使用。我创建了一个simple project来测试和演示设置。