webentwicklung-frage-antwort-db.com.de

Wie entferne ich die globale "use strict" von babel?

Ich verwende die Funktionsform "use strict" und möchte keine globale Form, die Babel nach der Transpilation hinzufügt. Das Problem ist, dass ich einige Bibliotheken verwende, die nicht den Modus "use strict" verwenden, und es kann einen Fehler auslösen, nachdem Skripts verkettet wurden

43
ani h

Babel 5

Sie würden "useStrict" auf die schwarze Liste setzen. Zum Beispiel hier ein Beispiel in einer Gruntdatei:

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

Babel 6

Da Babel 6 jetzt voll für Plugins aktiviert ist , anstatt useStrict auf die schwarze Liste zu setzen, fügen Sie einfach das strict-mode-Plugin hinzu. Wenn Sie eine Voreinstellung verwenden, die diese enthält, denke ich, müssen Sie Ihre eigene erstellen, die alle anderen enthält, aber nicht diese.

25
T.J. Crowder

Wie bereits für Babel 6 erwähnt, ist es die Voreinstellung transform-es2015-modules-commonjs, die den strikten Modus hinzufügt ..__ Wenn Sie die gesamte Voreinstellung es2015 ohne Modulumwandlungen verwenden möchten, geben Sie dies in Ihre .babelrc-Datei ein

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

Dadurch werden die Module und der strikte Modus deaktiviert, während alle anderen es2015-Transformationen aktiviert bleiben.

36
rcode

Es gibt jetzt ein Babel-Plugin, das Sie Ihrer Konfiguration hinzufügen können, um den strikten Modus zu entfernen: babel-plugin-transform-remove-strict-mode. Es ist ein wenig hässlich, dass der "use strict" hinzugefügt und dann entfernt wird, die Konfig-Datei jedoch viel schöner ist.

Dokumente befinden sich im GitHub-Repo: https://github.com/genify/babel-plugin-transform-remove-strict-mode

Ihr .babelrc sieht am Ende so aus:

{
  "presets": ["env"],
  "plugins": ["transform-remove-strict-mode"]
}
9
Alan Pierce

Babel 6 + es2015

Wir können babel-plugin-transform-es2015-modules-commonjs deaktivieren, um babel-plugin-transform-strict-mode zu verlangen.

Kommentieren Sie den folgenden Code in node_modules/babel-plugin-transform-es2015-modules-commonjs/lib/index.js in der Zeile 151

//inherits: require("babel-plugin-transform-strict-mode"),
7
shihongzhi

Ich kam auch über diese ziemlich lächerliche Einschränkung, dass Sie die Einstellungen einer vorhandenen Voreinstellung nicht deaktivieren oder überschreiben können, und habe stattdessen diese Voreinstellung verwendet: https://www.npmjs.com/package/babel-preset-es2015-without -strikt

7
Adam Reis

einfach .babelrc Lösung ändern

wenn Sie keine npm-Module ändern möchten, können Sie .babelrc ignore so verwenden

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

ignorieren Sie diese Datei, es funktioniert für mich!

die ignorierte Datei die 'use strict' nicht verwenden kann, ist alter Code und muss nicht mit Babel umgewandelt werden!

5
hisland

Ich persönlich verwende das gulp-iife-Plugin und wickle IIFEs um alle meine Dateien. Mir ist aufgefallen, dass das Babel-Plugin (mit der Voreinstellung es2015) auch eine globale "use strict" hinzufügt. Ich führe meinen Post-Babel-Code erneut über das iife Stream-Plugin aus, sodass das Verhalten von Babel für nichtig erklärt wird.

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"))
});

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

Bitte verwenden Sie "es2015-without-strict" anstelle von "es2015". Vergessen Sie nicht, dass Sie das Paket "babel-preset-es2015-without-strict" installiert haben müssen. Ich weiß, es wird kein Standardverhalten von Babel erwartet. Bitte berücksichtigen Sie, dass das Projekt noch nicht ausgereift ist.

1
wandalen

Bei Babel 6 können Sie das Preset nicht patchen und/oder fälschen und veröffentlichen, sondern nur das Original-Plugin umschließen und die Option strict auf false setzen.

Etwas in dieser Richtung sollte den Trick tun:

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;
1
Joscha

Seit Babel 6 können Sie zunächst Babel-CLI (wenn Sie Babel über die CLI verwenden möchten) oder Babel-Core (zur Verwendung der Node-API) installieren. Dieses Paket enthält keine Module.

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

Installieren Sie dann die benötigten Module. Installieren Sie also in Ihrem Fall kein Modul für den "strikten Modus".

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

Fügen Sie installierte Module in der .babelrc-Datei wie folgt hinzu:

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

Details finden Sie hier: https://babeljs.io/blog/2015/10/31/setting-up-babel-6

1
Alina Poluykova

Dies ist nicht grammatisch korrekt, funktioniert aber grundsätzlich für Babel 5 und 6, ohne dass ein Modul installiert werden muss, das ein anderes Modul entfernt.

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

Ich habe gerade ein Skript erstellt, das im Knoten ausgeführt wird und "use strict" entfernt. in der ausgewählten Datei.

datei: 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