Babelify在从node_modules导入模块时抛出ParseError

我正在与Babelify和Browserify合作 。 另外,我正在使用节点模块系统的ES6风格的模块function。

我想把所有我自己的模块放到node_modules/libs

例如:

test.jsnode_modules/libs

 export default () => { console.log('Hello'); }; 

main.js (将被编译为bundle.js

 import test from 'libs/test'; test(); 

之后,我用这个命令将上面的代码编译到bundle.js

 browserify -t babelify main.js -o bundle.js 

但不幸的是,我有一些错误:

 export default () => { ^ ParseError: 'import' and 'export' may appear only with 'sourceType: module' 

目录结构:

 [test] `-- node_modules │ `-- libs │ `-- test.js `-- main.js 

但是,当自己的模块不在node_modules是这样的:

 [test] `-- libs │ `-- test.js `-- main.js 

然后,它工作正常。 如何在node_modules使用带babelify的ES6样式模块?

这就是Browserify如何转换工作,转换只在被引用的模块中有效。

如果你想让node_modules中的模块有一个转换,你需要添加一个package.json到该模块,并添加babelify作为该模块的转换。 例如

 "browserify": { "transform": [ "babelify" ] }, 

在你的package.json加上babelify作为一个依赖将告诉babelify在模块内部的任何文件上运行babelify转换。

libs是node_modules中的一个文件夹可能是一个坏主意。 通常这个文件夹会有真正的独立模块。 我通常会说,如果该文件夹不能在其他地方重新使用,那么它不应该在node_modules中。

更新

对于最近发布的Babel v6,您还需要指定您希望对代码执行的转换。 为此,我build议在根目录下创build一个.babelrc文件来configurationBabel。

 { "presets": ["es2015"] } 

 npm install --save-dev babel-preset-es2015 

您可以在browserify.transform字段中的package.json中指定源代码转换 。 关于module-deps自述文件中package.json中源代码转换的工作方式,请参阅更多信息。

来源: https : //github.com/substack/node-browserify#browserifytransform


示例my_batman_project/node_modules/test_robin_module/package.json ):

 "browserify": { "transform": [ "babelify" ] }, 

browserify将读取configuration并自动执行任何给定的转换。

我相信这个问题实际上与ESLint有关。

ESLint 2.0改变了解释ES6模块所需的东西。 http://eslint.org/docs/user-guide/migrating-to-2.0.0

您需要修改您的ecmaFeaturesconfiguration选项,并将其replace为如下所示的内容:

  "parserOptions": { "ecmaVersion": 6, "sourceType": "module" },