私は「use strict」の関数形式を使用していますが、翻訳後にBabelが追加するグローバル形式は必要ありません。問題は、「use strict」モードを使用していないライブラリを使用しているため、スクリプトが連結された後にエラーがスローされる可能性があることです。
"useStrict"
をブラックリストに登録します。たとえば、Gruntfileの例を次に示します。
babel: {
options: {
blacklist: ["useStrict"],
// ...
},
// ...
}
Babel 6は プラグインの完全なオプトイン であるため、useStrict
をブラックリストに登録する代わりに、 strict-mode
プラグイン を含めないでください。それを含むプリセットを使用している場合、他のすべてを含む独自のプリセットを作成する必要がありますが、そのプリセットは作成しないでください。
Babel 6で既に言及したように、厳密モードを追加するのはtransform-es2015-modules-commonjs
プリセットです。モジュール変換なしでes2015
プリセット全体を使用する場合は、これを.babelrc
ファイルに入れます。
{
"presets": [
["es2015", { "modules": false }]
]
}
これにより、モジュールとストリクトモードが無効になり、他のすべてのes2015変換が有効のままになります。
厳密モードを削除する設定に追加できる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"]
}
また、既存のプリセットの設定を無効にしたり上書きしたりできないというこのとんでもない制限に遭遇し、代わりにこのプリセットを使用することに頼りました: https://www.npmjs.com/package/babel-preset-es2015 -without-strict
バベル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"),
.babelrc
ソリューションを変更するだけ
npmモジュールを変更したくない場合は、.babelrc
ignoreを使用できます。
{
"presets": ["es2015"],
"ignore": [
"./src/js/directive/datePicker.js"
]
}
そのファイルを無視してください、それは私のために働きます!
無視されたファイル'use strict'
を使用できないのは古いコードであり、変換にbabelを使用する必要はありません!
個人的には、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"))
});
「es2015」の代わりに「es2015-without-strict」を使用してください。パッケージ「babel-preset-es2015-without-strict」をインストールする必要があることを忘れないでください。 Babelのデフォルトの動作が予期されていないことはわかっています。プロジェクトがまだ成熟していないことを考慮してください。
サルがプリセットにパッチを適用したり、フォークしたり公開したりする代わりに、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;
Babel 6以降では、まずbabel-cli(CLIからBabelを使用する場合)またはbabel-core(Node APIを使用する)をインストールできます。このパッケージにはモジュールは含まれていません。
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
plugins: [
[
require("@babel/plugin-transform-modules-commonjs"),
{
strictMode: false
}
],
]
これは文法的に正しくありませんが、別のモジュールを削除するモジュールをインストールしなくても基本的にBabel 5と6の両方で動作しますモジュール。
code.replace(/^"use strict";$/, '')
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