babeljs - 为什么 "transform-es2015-modules-commonjs"在 Babel 6 中要加上 "use strict"?

标签 babeljs

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



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

the source-code似乎 inherit "babel-plugin-transform-strict-mode" ,如果我删除它,它仍然可以正常工作,即它编译 import "…"进入 require(…)不添加“使用严格”。

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

最佳答案

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

  • 作为一个“脚本”,它通常是我们在标准 JS 环境中习惯的一切
    不允许使用 ES6 模块语法,并且出于向后兼容的原因,内容仅在具有 "use strict"; 前缀指令时才被视为严格的。 .
  • 作为一个“模块”
    允许使用 ES6 模块语法,并且所有代码在所有情况下都自动成为严格模式。

  • 因为 ES6 模块语法与某个东西是模块还是脚本有关,如果某个东西是“模块”,它会自动变得严格,Babel 使用 transform-es2015-modules-commonjs 的存在。同时启用这两种转换。
    即使您只启用模块转换本身并排除严格模式,您编写的所有代码在技术上都是无效的,并且一旦您尝试在真实的 ES6 模块环境中使用您的 ES6 代码,您是否喜欢它都会很严格或不。
    如果您不希望您的代码过于严格,我建议禁用 transform-es2015-modules-commonjs转换和使用 CommonJS 模块,因为它们没有这样的严格模式要求。

    关于babeljs - 为什么 "transform-es2015-modules-commonjs"在 Babel 6 中要加上 "use strict"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34366875/

    相关文章:

    javascript - 使用 Jest 测试 Angular 应用程序 - Jest 遇到意外标记

    babeljs - 如何在包裹中使用服务人员?

    javascript - webpack 的“npm run build”,我收到错误...帮助我

    webpack - Webpack,Babel 7.4.0和core-js 3

    javascript - Expect 测试不适用于 ES6/ES2015 Set 对象

    javascript - IE不支持方法 'assign',怎么办

    javascript - 在 Javascript ES6 中使用 Chai(或 Should)断言数组(使用 Babel)

    javascript - 如何在 React Native 中查看 javascript 包代码?

    webpack - 碰到我不理解的babel构建错误

    javascript - 无法使用 Babel 7 转换 Async/Await 浏览器