web-dev-qa-db-ja.com

babelによって追加されたグローバルな「厳密な使用」を削除する方法

私は「use strict」の関数形式を使用していますが、翻訳後にBabelが追加するグローバル形式は必要ありません。問題は、「use strict」モードを使用していないライブラリを使用しているため、スクリプトが連結された後にエラーがスローされる可能性があることです。

48
ani h

バベル5

"useStrict"をブラックリストに登録します。たとえば、Gruntfileの例を次に示します。

babel: {
    options: {
        blacklist: ["useStrict"],
        // ...
    },
    // ...
}

バベル6

Babel 6は プラグインの完全なオプトイン であるため、useStrictをブラックリストに登録する代わりに、 strict-modeプラグイン を含めないでください。それを含むプリセットを使用している場合、他のすべてを含む独自のプリセットを作成する必要がありますが、そのプリセットは作成しないでください。

25
T.J. Crowder

Babel 6で既に言及したように、厳密モードを追加するのはtransform-es2015-modules-commonjsプリセットです。モジュール変換なしでes2015プリセット全体を使用する場合は、これを.babelrcファイルに入れます。

{
  "presets": [
    ["es2015", { "modules": false }]
  ]
}

これにより、モジュールとストリクトモードが無効になり、他のすべてのes2015変換が有効のままになります。

41
rcode

厳密モードを削除する設定に追加できる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"]
}
12
Alan Pierce

また、既存のプリセットの設定を無効にしたり上書きしたりできないというこのとんでもない制限に遭遇し、代わりにこのプリセットを使用することに頼りました: https://www.npmjs.com/package/babel-preset-es2015 -without-strict

8
Adam Reis

バベル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"),
5
shihongzhi

.babelrcソリューションを変更するだけ

npmモジュールを変更したくない場合は、.babelrc ignoreを使用できます。

{
  "presets": ["es2015"],
  "ignore": [
    "./src/js/directive/datePicker.js"
  ]
}

そのファイルを無視してください、それは私のために働きます!

無視されたファイル'use strict'を使用できないのは古いコードであり、変換にbabelを使用する必要はありません!

4
hisland

個人的には、gulp-iifeプラグインを使用し、すべてのファイルをIIFEでラップしています。 babelプラグイン(プリセットes2015を使用)がグローバルな「use strict」も追加することに気付きました。 babelが行ったことを無効にするために、iifeストリームプラグインを介してbabel後のコードを再度実行します。

gulp.task("build-js-source-dev", function () {
        return gulp.src(jsSourceGlob)
      .pipe(iife())
          .pipe(plumber())
          .pipe(babel({ presets: ["es2015"] }))// compile ES6 to ES5
          .pipe(plumber.stop())
      .pipe(iife()) // because babel preset "es2015" adds a global "use strict"; which we dont want
      .pipe(concat(jsDistFile)) // concat to single file
          .pipe(gulp.dest("public_dist"))
});
4

「es2015」の代わりに「es2015-without-strict」を使用してください。パッケージ「babel-preset-es2015-without-strict」をインストールする必要があることを忘れないでください。 Babelのデフォルトの動作が予期されていないことはわかっています。プロジェクトがまだ成熟していないことを考慮してください。

2
wandalen

サルがプリセットにパッチを適用したり、フォークしたり公開したりする代わりに、Babel 6の場合は、元のプラグインをラップしてstrictオプションをfalseに設定することもできます。

これらの線に沿って何かがトリックを行う必要があります:

const es2015preset = require('babel-preset-es2015');
const commonjsPlugin = require('babel-plugin-transform-es2015-modules-commonjs');

es2015preset.plugins.forEach(function(plugin) {
  if (plugin.length && plugin[0] === commonjsPlugin) {
    plugin[1].strict = false;
  }
});

module.exports = es2015preset;
2
Joscha

Babel 6以降では、まずbabel-cli(CLIからBabelを使用する場合)またはbabel-core(Node AP​​Iを使用する)をインストールできます。このパッケージにはモジュールは含まれていません。

npm install --global babel-cli
# or
npm install --save-dev babel-core

次に、必要なモジュールをインストールします。したがって、「厳格モード」用のモジュールをインストールしないでください。

npm install --save-dev babel-plugin-transform-es2015-arrow-functions

そして、インストールしたモジュールを.babelrcファイルに次のように追加します。

{
  "plugins": ["transform-es2015-arrow-functions"]
}

詳細はこちら: https://babeljs.io/blog/2015/10/31/setting-up-babel-6

2
Alina Poluykova
plugins: [
    [
        require("@babel/plugin-transform-modules-commonjs"), 
        {
            strictMode: false
        }
    ],
]
2

これは文法的に正しくありませんが、別のモジュールを削除するモジュールをインストールしなくても基本的にBabel 5と6の両方で動作しますモジュール。

code.replace(/^"use strict";$/, '')
1
Travis Webb

Nodeで実行し、「use strict」を削除するスクリプトを作成しました。選択したファイル内。

ファイル:script.js:

let fs = require('fs');
let file = 'custom/path/index.js';
let data = fs.readFileSync(file, 'utf8');
let regex = new RegExp('"use\\s+strict";');
if (data.match(regex)){
    let data2 = data.replace(regex, '');
    fs.writeFileSync(file, data2);
    console.log('use strict mode removed ...');
}
else {
    console.log('use strict mode is missing .');
}

node ./script.js

0
kolserdav