【问题标题】:Why does "transform-es2015-modules-commonjs" add "use strict" in Babel 6?为什么“transform-es2015-modules-commonjs”在 Babel 6 中添加了“use strict”?
【发布时间】:2016-03-25 19:51:10
【问题描述】:

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

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

the source-code 中似乎是inherit "babel-plugin-transform-strict-mode",如果我删除它,它仍然可以正常工作,即它将import "…" 编译成require(…) 而不添加“use strict”。

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

【问题讨论】:

    标签: babeljs


    【解决方案1】:

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

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

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

    2. 作为“模块”

      允许使用 ES6 模块语法,所有代码在所有情况下都自动为严格模式。

    因为 ES6 模块语法与模块或脚本相关,如果是“模块”,则自动严格,Babel 使用 transform-es2015-modules-commonjs 的存在同时启用两种转换。

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

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

    【讨论】:

      猜你喜欢
      • 2016-02-22
      • 2016-07-15
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      相关资源
      最近更新 更多