Babelify在从node_modules导入模块时会抛出ParseError
Babelify throws ParseError on import a module from node_modules
我正在与Babelify
和Browserify合作。此外,我使用ES6风格的模块功能,通过节点模块系统。
我想把我自己的模块都放进node_modules/libs
。
node_modules/libs
中的test.js
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
作为一个依赖将告诉browserify
运行babelify
转换模块内的任何文件。
将libs
作为node_modules中的一个文件夹可能是一个坏主意。通常,该文件夹将包含真正的独立模块。我通常会说,如果文件夹不能在其他地方被获取和重用,那么它就不应该在node_modules中。
对于最近发布的Babel v6,您还需要指定您希望对代码执行哪些转换。为此,我建议在根目录中创建一个.babelrc
文件来配置Babel。
{
"presets": ["es2015"]
}
和
npm install --save-dev babel-preset-es2015
的package.json
中指定源转换browserify.transform
字段。有更多关于如何做的信息源转换在包中工作。在模块的deps上readme .
来源:https://github.com/substack/node-browserify browserifytransform
示例 (my_batman_project/node_modules/test_robin_module/package.json
):
"browserify": {
"transform": [
"babelify"
]
},
browserify将读取配置并自动执行任何给定的转换。
我认为这个问题实际上与ESLint有关。
ESLint 2.0改变了它解释ES6模块所需的条件。http://eslint.org/docs/user-guide/migrating-to-2.0.0
您需要修改您的ecmaFeatures
配置选项,并将其替换为以下内容:
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module"
},
- Javascript,访问一个主要对象模块模式中的每个对象
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 如何从模块链中调用函数.导出到节点中
- 尽管链接成功并已成功下载,但未找到NPM模块
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 从模块内部访问Express装载路径
- RequireJS向模块传递配置总是返回undefined
- Node.js正在更改应用程序以使用集群模块
- 在Meteor项目中安装并包含npm模块后出错
- 模块模式和这个
- 将依赖外部库的UMD模块与browserfy捆绑在一起
- 找不到模块捆绑包
- JavaScript命名约定;静态“;类或模块
- 显示模块模式在Knockout中设置模型的新实例
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- Javascript模块系统I'I’我正在努力,但搞不明白
- 如何捆绑循环相关模块
- 如何捆绑commonjs模块,除非指定需要
- 错误:$injector:modulerr模块错误(我的第一个SPA应用程序)
- Babelify在从node_modules导入模块时会抛出ParseError