我有一个使用BabelJS的ES6语法的npm CLI工具。具体来说,我正在使用ES6的箭头功能。
在我的工具入口点,我有以下要求:
require('babel-core/register');
var program = require('./modules/program.js');
我在root中也有一个.babelrc
文件,如下所示:
{ "presets": ["es2015"] }
在这种情况下,program.js
是完成大部分繁重任务的地方。在这个文件中有一个箭头函数,如:
arrayOfStrings.forEach((substr) => {
console.log(substr);
});
如果我使用以下命令运行此工具,它可以正常工作。
node index.js --options
但是,如果我使用npm publish
发布此工具并按如下方式运行:
tool-name --options
我收到此错误:
/usr/local/lib/node_modules/unfollow/modules/program.js:134
arrayOfStrings.forEach((substr) => {
^^
SyntaxError: Unexpected token =>
at exports.runInThisContext (vm.js:73:16)
at Module._compile (module.js:443:25)
at Module._extensions..js (module.js:478:10)
at Object.require.extensions.(anonymous function) [as .js] (/usr/local/lib/node_modules/tool-name/node_modules/babel-core/node_modules/babel-register/lib/node.js:138:7)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at Object.<anonymous> (/usr/local/lib/node_modules/tool-name/index.js:7:15)
at Module._compile (module.js:460:26)
有谁知道为什么会这样?
答案 0 :(得分:2)
babel-register
仅用于简化本地开发,而不用于分布式软件包。如果你正在为npm制作东西,你应该事先将它编译成ES5。