Npm 发布用ES6编写的节点模块,但不提供针对最新浏览器的传输ES5版本b/c

Npm 发布用ES6编写的节点模块,但不提供针对最新浏览器的传输ES5版本b/c,npm,ecmascript-6,gulp,babeljs,browserify,Npm,Ecmascript 6,Gulp,Babeljs,Browserify,我的团队将发布一个用ES6编写的节点模块,面向最新的浏览器。我们使用的所有ES6功能,如async/await,import/export,都受我们的目标浏览器支持。因此,我认为提供透明的ES5版本没有意义(我们的目标受众向我们保证,他们只会使用最新的Chrome) 但我发现,在使用我们的模块时,没有传输的ES5版本,他们得到了语法错误:“import”和“export”可能只与“sourceType:module”一起出现,即使他们的gulpfile已经设置好了 return browseri

我的团队将发布一个用ES6编写的节点模块,面向最新的浏览器。我们使用的所有ES6功能,如
async/await
import/export
,都受我们的目标浏览器支持。因此,我认为提供透明的ES5版本没有意义(我们的目标受众向我们保证,他们只会使用最新的Chrome)

但我发现,在使用我们的模块时,没有传输的ES5版本,他们得到了
语法错误:“import”和“export”可能只与“sourceType:module”一起出现
,即使他们的gulpfile已经设置好了

return browserify({ ... })
  .transform(babelify.configure({
    presets: ["es2015"]
  }))
  ...
如果他们只是在自己的代码中包含我们的模块源代码,那么他们就可以导入我的模块而不会出现任何错误。这让我相信我的模块中应该有一些设置,所以我只能提供ES6版本

顺便说一句,我读过 及


他们不是我的问题,那里的答案没有解决语法错误:'import'和'export'可能只出现在'sourceType:module'中。

我花了一整天的时间解决它,所以我想分享我的经验

首先,browserify的解析器抱怨说
SyntaxError:“import”和“export”只能与“sourceType:module”一起出现
,所以我需要做的是让客户端的browserify转换我的模块,解决方案变得非常简单

一个可能的解决方案是添加:

{“browserify”:{ “transform”:[“babelify”]}}到要转换的所有modules package.json的根目录

因此,将
“browserify”:{“transform”:[“babelify”]}
添加到我的模块的package.json中,问题就解决了

很容易验证,例如,在我的模块的.babelrc中,我特别设置了
“模块”:false
(b/c)

然后我得到了
SyntaxError:'import'和'export'可能只与'sourceType:module'一起出现。
再次出现

PS


我收到了不止一条评论/答案,上面说:
,那么,您在导入/导出语法方面有问题吗,或者试图使用您的模块的人有问题吗?请发布导致问题的代码。后者。伙计,我想我在问题中已经说得很清楚了。“我们使用的所有ES6功能都得到了目标浏览器的支持。”-那你为什么还要使用Babel呢?B/C我的客户端使用browserify将所有js文件捆绑到一个大文件中。请看我的答案。您可能想尝试一下哪个可以捆绑ES6模块感谢您的自我回答。我想知道这是否是唯一的解决办法。这也是我在这里发布答案的原因之一,看看其他人是否能想出更好的解决办法:)
{ "presets": [[
  "env",
  {
    "modules":false,
    "debug": true
  }
]]}