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

2024-02-02

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

我发现这是“transform-es2015-modules-commonjs”插件 http://babeljs.io/docs/plugins/transform-es2015-modules-commonjs/ (in “es2015”预设 http://babeljs.io/docs/plugins/preset-es2015/)这就是添加它的原因。

In 源代码 https://github.com/babel/babel/blob/master/packages/babel-plugin-transform-es2015-modules-commonjs/src/index.js#L122看来inherit "babel-plugin-transform-strict-mode",如果我删除它,它仍然可以正常工作,即它编译import "…" into require(…)不添加“use strict”。

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


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

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

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

  2. 作为一个“模块”

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

因为 ES6 模块语法与某个东西是模块还是脚本有关,并且如果某个东西是“模块”,它会自动严格,Babel 使用了transform-es2015-modules-commonjs同时启用这两种转换。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么“transform-es2015-modules-commonjs”在 Babel 6 中添加“use strict”? 的相关文章

随机推荐