Babelify在从node_modules导入模块时抛出ParseError
我正在与Babelify
和Browserify合作 。 另外,我正在使用节点模块系统的ES6风格的模块function。
我想把所有我自己的模块放到node_modules/libs
。
例如:
test.js
在node_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
您需要修改您的ecmaFeatures
configuration选项,并将其replace为如下所示的内容:
"parserOptions": { "ecmaVersion": 6, "sourceType": "module" },