为什么“transform-es2015-modules-commonjs”在Babel 6中添加“use strict”?

时间:2015-12-19 03:13:59

标签: babeljs

使用Babel 6,我正在尝试在我的编译代码中拥有"use strict"

我发现它是"transform-es2015-modules-commonjs" plugin(在"es2015" preset中),它是添加它的东西。

the source-code inherit "babel-plugin-transform-strict-mode"似乎import "…",如果删除它,它仍然可以正常工作,即它将require(…)编译成factGetFeat.getPromise().then(function(promise){ $scope.data = promise; $log.info($scope.data); //gets the object all right }).then(function(){ // here you can see $scope.data updated with a new value $log.info($scope.data); }); 而不添加“使用严格” ”

为什么“transform-es2015-modules-commonjs”强制严格模式?

1 个答案:

答案 0 :(得分:7)

在ES6规范中,有两种模式可以处理文件:

  1. 作为一个“脚本”,通常是我们在标准JS环境中习惯的一切

    不允许使用ES6模块语法,并且出于向后兼容的原因,如果内容的前缀指令为"use strict";,则内容仅被视为严格。

  2. 作为“模块”

    允许使用ES6模块语法,并且所有代码都是自动严格模式。

  3. 因为ES6模块语法与某个模块或脚本有关,并且某些东西是“模块”它是自动严格的,所以Babel使用transform-es2015-modules-commonjs的存在来同时启用两个转换时间。

    即使您只启用模块转换本身并排除严格模式,您编写的所有代码在技术上都是无效的,只要您尝试在真正的ES6模块环境中使用ES6代码,它是否会严格你喜不喜欢。

    如果您不希望您的代码严格,我建议禁用transform-es2015-modules-commonjs转换并使用CommonJS模块,因为它们没有这样的严格模式要求。