w119 only esversion es6 cant available async all javascript jshint babeljs use-strict

javascript - cant - jshint import is only available in es6 use esversion 6 '') w119 w119



Cómo eliminar el "uso estricto" global agregado por babel (13)

Estoy usando la forma de función de "uso estricto" y no quiero la forma global que Babel agrega después de la transpilación. El problema es que estoy usando algunas bibliotecas que no usan el modo "uso estricto" y podría arrojar un error después de que los scripts se concatenan


Babel 5

"useStrict" lista negra "useStrict" . Por ejemplo, aquí hay un ejemplo en un Gruntfile:

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

Babel 6

Dado que Babel 6 está totalmente useStrict para complementos ahora , en lugar de useStrict lista negra useStrict , simplemente no incluye el complemento de strict-mode . Si está usando un preset que lo incluye, creo que tendrá que crear uno propio que incluya todos los demás, pero no ese.


Acabo de hacer un script que se ejecuta en el Nodo y elimina "use estricto"; en el archivo seleccionado

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


Ahora hay un complemento de babel que puede agregar a su configuración que eliminará el modo estricto: babel-plugin-transform-remove-strict-mode . Es un poco feo porque el "use strict" se agrega y luego se elimina, pero hace que la configuración sea mucho más agradable.

Los documentos están en el repositorio de GitHub: https://github.com/genify/babel-plugin-transform-remove-strict-mode

Su .babelrc termina luciendo así:

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


Babel 6 + es2015

Podemos deshabilitar babel-plugin-transform-es2015-modules-commonjs para requerir babel-plugin-transform-strict-mode .

Así que comente el siguiente código en node_modules/babel-plugin-transform-es2015-modules-commonjs/lib/index.js en la línea 151

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


Como ya se mencionó para Babel 6, es el transform-es2015-modules-commonjs que agrega el modo estricto. En caso de que desee utilizar todo el preestablecido es2015 sin transformaciones de módulo, coloque esto en su archivo .babelrc :

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

Esto deshabilitará los módulos y el modo estricto, mientras mantiene todas las demás transformaciones es2015 habilitadas.


Desde babel 6 puede instalar en primer lugar babel-cli (si desea usar Babel desde la CLI) o babel-core (para usar la API de nodo). Este paquete no incluye módulos.

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

Luego instale los módulos que necesita. Por lo tanto, no instale el módulo para ''modo estricto'' en su caso.

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

Y agregue módulos instalados en el archivo .babelrc como este:

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;

Ver detalles aquí: https://babeljs.io/blog/2015/10/31/setting-up-babel-6


Esto no es grammatically correcto, pero básicamente funcionará tanto para Babel 5 como para 6 sin tener que instalar un módulo que elimine otro módulo.

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


Para babel 6 en lugar de mono parchear el preajuste y / o bifurcarlo y publicarlo, también puede envolver el complemento original y establecer la opción strict en false .

Algo en ese sentido debería hacer el truco:

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


Personalmente, uso el complemento gulp-iife y envuelvo IIFE alrededor de todos mis archivos. Me di cuenta de que el complemento de babel (usando el preestablecido es2015) también agrega un "uso estricto" global. Ejecuto mi código post babel a través del complemento de transmisión iife nuevamente para que anule lo que hizo babel.

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



Utilice "es2015-sin estricto" en lugar de "es2015". No olvide que necesita tener instalado el paquete "babel-preset-es2015-without-estricto". Sé que no se espera un comportamiento predeterminado de Babel, tenga en cuenta que el proyecto aún no está maduro.


solo cambie la solución .babelrc

si no desea cambiar ningún módulo npm, puede usar .babelrc ignore de esta manera

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

ignora ese archivo, ¡funciona para mí!

¡el archivo ignorado que no puede usar ''use strict'' es un código antiguo, y no necesita usar babel para transformarlo!


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