Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.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 我可以使用Babel传输到ES5,但保留导入/导出而不是commonjs吗?_Javascript_Babeljs_Es6 Modules - Fatal编程技术网

Javascript 我可以使用Babel传输到ES5,但保留导入/导出而不是commonjs吗?

Javascript 我可以使用Babel传输到ES5,但保留导入/导出而不是commonjs吗?,javascript,babeljs,es6-modules,Javascript,Babeljs,Es6 Modules,我想创建一个npm库,它使用ES导入/导出而不是commonjs来交付模块(例如lodash ESdoes)。如果我没有弄错的话,交付的代码必须是ES5,并且具有导入/导出功能 我不知道如何配置Babel来做到这一点。我认为这一选择应该会奏效 当我在calc.js中有以下代码时: //calc.js 导出功能添加(a、b){ 常数结果=a+b 返回结果 } 和babel配置。babelrc: { "presets": [ [ "@babel/preset-env",

我想创建一个npm库,它使用ES导入/导出而不是commonjs来交付模块(例如
lodash ES
does)。如果我没有弄错的话,交付的代码必须是ES5,并且具有导入/导出功能

我不知道如何配置Babel来做到这一点。我认为这一选择应该会奏效

当我在
calc.js
中有以下代码时:

//calc.js
导出功能添加(a、b){
常数结果=a+b
返回结果
}
和babel配置
。babelrc

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "esmodules": true
        }
      }
    ]
  ]
}
运行babel时:

babel calc.js
输出为:

“严格使用”;
Object.defineProperty(导出,“\uu esModule”{
值:true
});
exports.add=添加;
功能添加(a、b){
var结果=a+b;
返回结果;
}
这是commonjs(
exports.add
)。选项
targets.esmodules
似乎没有效果。如何让Babel生成es模块(
export function add
)?还是我误解了在npm上交付ES模块的想法?

看起来是基于您确实应该传输一个只有
导入
/
导出
的版本,但已经传输了所有其他非ES5语法。他们说了一些类似的话。此格式假定您的用户正在使用诸如Rollup或Webpack之类的工具,这些工具本机支持
导入
/
导出
语句,但随后可能会将它们转换为ES5兼容语法,而无需通过Babel运行库


看起来Redux特别做到了这一点,然后在他们的
.babelrc
文件中告诉Babel不要传输模块语句。我不清楚Lodash是如何管理它的,因为我在repo中没有看到任何构建脚本。

“如果我没有弄错,交付的代码必须是ES5并且具有导入/导出功能。”-您可能弄错了。任何理解
导入
/
导出
的环境也理解所有其他ES6语法,所以这个要求真的很奇怪。谢谢。这也是我的假设,但我收到了相当多的问题报告。JS项目通常从不从依赖项传输代码,只从项目本身的源代码传输代码。因此,当我发布一个需要透明的库时,它会出现问题。查看,
es
文件夹包含es
导入
/
导出
,代码被传输到ES5(无
=>
常量
等)。我也是。如何用巴贝尔做到这一点?耶皮,这确实是缺失的一环,非常感谢罗伯特发现了这一点!我现在有了一个概念验证,可以使用Babel配置
{“预设”:[[“@Babel/preset env”,“modules:false}]}