如何删除babel添加的全局"use strict"

ani*_*i h 48 javascript use-strict jshint babeljs

我正在使用"使用严格"的函数形式,并且不希望Babel在翻译后添加的全局形式.问题是我使用的是一些没有使用"use strict"模式的库,并且在脚本连接后可能会抛出错误

rco*_*ode 43

正如Babel 6已经提到的那样,它是transform-es2015-modules-commonjs预设,它增加了严格的模式.如果您想在es2015没有模块转换的情况下使用整个预设,请将其放在您的.babelrc文件中:

{
  "presets": [
    ["es2015", { "modules": false }]
  ]
}
Run Code Online (Sandbox Code Playgroud)

这将禁用模块和严格模式,同时保持启用所有其他es2015转换.

  • 2019 年更新 - 这也适用于 `@babel/preset-env` (3认同)

T.J*_*der 25

巴别5

你是黑名单"useStrict".例如,这是Gruntfile中的一个示例:

babel: {
    options: {
        blacklist: ["useStrict"],
        // ...
    },
    // ...
}
Run Code Online (Sandbox Code Playgroud)

巴别塔6

由于Babel 6现在完全可以选择使用插件,而不是黑名单useStrict,因此您不需要包含该strict-mode插件.如果你正在使用包含它的预设,我认为你必须创建自己的,包括所有其他的,但不是那个.

  • 这是["transform-es2015-modules-commonjs"插件](http://babeljs.io/docs/plugins/transform-es2015-modules-commonjs/)("es2015"预设中的一个插件),它正在添加"严格使用". (16认同)
  • 我刚刚发布了`babel-preset-es2015-nostrict`包.它基本上有`transform-es2015-modules-commonjs`插件注释掉了,其他一切就像我在分叉的普通`babel-preset-es2015 @ 6.6.0`中一样. (8认同)
  • 谢谢!你的回答澄清了我的疑问,但我仍然面临着这个问题.所以这里有更多细节:我正在使用**gulp-babel**并且没有使用**strict-mode**插件,也没有使用内部使用**strict-mode**插件的任何预设. (2认同)

Ala*_*rce 12

现在有一个babel插件,您可以添加到您的配置,将删除严格模式:babel-plugin-transform-remove-strict-mode."use strict"添加然后删除它有点难看,但它使配置更好.

文档位于GitHub回购中:https: //github.com/genify/babel-plugin-transform-remove-strict-mode

你的.babelrc最终看起来像这样:

{
  "presets": ["env"],
  "plugins": ["transform-remove-strict-mode"]
}
Run Code Online (Sandbox Code Playgroud)


Ada*_*eis 8

我也遇到了这个相当荒谬的限制,你不能禁用或覆盖现有预设的设置,而是使用这个预设代替:https://www.npmjs.com/package/babel-preset-es2015-without-strict


Kle*_*fia 6

plugins: [
    [
        require("@babel/plugin-transform-modules-commonjs"), 
        {
            strictMode: false
        }
    ],
]
Run Code Online (Sandbox Code Playgroud)


shi*_*zhi 5

Babel 6 + es2015

我们可以禁用babel-plugin-transform-es2015-modules-commonjs要求babel-plugin-transform-strict-mode.

所以node_modules/babel-plugin-transform-es2015-modules-commonjs/lib/index.js在151行注释以下代码

//inherits: require("babel-plugin-transform-strict-mode"),
Run Code Online (Sandbox Code Playgroud)

  • 等什么?那么,这个提议的解决方案是编辑下次安装npm时会被覆盖的文件?部署时怎么样? (8认同)
  • IMO这是更好的答案.这意味着在构建脚本中添加(godawful)hack,但是这样我就不必依赖于分叉预设(已经过时了) (2认同)

Yai*_*lka 5

你可以告诉 babel 你的代码是一个脚本:

sourceType: "script"
Run Code Online (Sandbox Code Playgroud)

这不会添加use strict. 查看sourceType 选项文档

来源:https : //github.com/babel/babel/issues/7910#issuecomment-388517631