Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Babelify在从节点\模块导入模块时抛出ParseError_Javascript_Node.js_Browserify_Ecmascript 6_Babeljs - Fatal编程技术网

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
plus
babelify
作为依赖项,将告诉
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"
  },