Javascript Babelify在从节点\模块导入模块时抛出ParseError
我正在与Javascript Babelify在从节点\模块导入模块时抛出ParseError,javascript,node.js,browserify,ecmascript-6,babeljs,Javascript,Node.js,Browserify,Ecmascript 6,Babeljs,我正在与Babelify和。此外,我还通过节点模块系统使用ES6风格的模块特性 我想将我自己的所有模块放入节点\u模块/libs 例如: node\u modules/libs中的test.js export default () => { console.log('Hello'); }; main.js(将编译为bundle.js) 之后,我使用以下命令将上述代码编译为bundle.js: browserify -t babelify main.js -o bundle.js 但
Babelify
和。此外,我还通过节点模块系统使用ES6风格的模块特性
我想将我自己的所有模块放入节点\u模块/libs
例如:
node\u modules/libs中的test.js
export default () => {
console.log('Hello');
};
main.js
(将编译为bundle.js
)
之后,我使用以下命令将上述代码编译为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\u modules
中时,如下所示:
[test]
`-- libs
│ `-- test.js
`-- main.js
然后,它工作得很好。如何将ES6样式的模块与node_modules
中的babelify
一起使用?这就是Browserify转换的工作方式,转换仅在被引用的模块中直接起作用
如果您想让node_modules中的模块具有转换,则需要向该模块添加package.json
,并将babelify
添加为该模块的转换。e、 g
"browserify": {
"transform": [
"babelify"
]
},
在您的包内.json
plusbabelify
作为依赖项,将告诉browserify
在该模块内的任何文件上运行babelify
转换
然而,让libs
成为节点单元模块中的文件夹可能是个坏主意。通常,该文件夹中会有真正的独立模块。我通常会说,如果文件夹不能在其他地方使用和重用,那么它就不应该在node_模块中
更新
对于最近发布的BabelV6,您还需要指定希望对代码执行哪些转换。为此,我建议在根目录中创建一个.babelrc
文件来配置Babel
{
"presets": ["es2015"]
}
及
您可以在
browserify.transform
字段。还有更多关于如何进行的信息
源代码转换在服务器上的package.json中工作
资料来源:
示例(my_batman_project/node_modules/test_robin_module/package.json
):
将读取配置并自动执行任何给定的转换。我相信这个问题实际上与ESLint有关
ESLint 2.0更改了解释ES6模块所需的内容
您需要修改ecmaFeatures
配置选项,并将其替换为以下内容:
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module"
},
谢谢你的回答。不过,libs文件夹只是存储我的个人库(如内部模块)。但这仍然是一种糟糕的方法吗?通常,如果它们都签入一个回购协议,我希望您只拥有一个普通的子文件夹。如果它们是真正独立的库,那么我可能会使它们独立于git repo,并在我的包中引用github URL。json.hmm,我的包中确实有babelify,但我仍然有相同的错误。@nXqd您可以使用bower Too将私有git存储库作为模块导入。这对我来说并不足够,我添加了预设“browserify”:{“转换”:[[“babelify”,{“预设”:[“es2015”]}]}
在这个答案的基础上,我发现我需要一个额外的步骤来让它与Babel 6.0一起工作。从6.0版开始,Babel是一个通用平台,默认情况下不再传输ES2015。接下来,我创建了一个.babelrc文件来加载ES2015预设,它解决了这个解析错误
问题m、 使用以下配置创建.babelrc,以修复解析JSX代码时发生的ParseError。{“预设”:[“es2015”、“第1阶段”、“react”]}
npm install --save-dev babel-preset-es2015
"browserify": {
"transform": [
"babelify"
]
},
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module"
},