gulp - browserify bundle
"This" en guión bajo no está definido después de compilar con browserify y debowerify (2)
Entonces primero .. Tengo la próxima tarea de trago:
gulp.task(''js'', function() {
browserify(''./src/js/main.js'')
.bundle()
.on(''error'', onError)
.pipe( source(''main.js'') )
.pipe( gulp.dest(path.build.js) );
});
y package.json:
{
"browserify": {
"transform": [
["babelify", { "presets": ["es2015"] }],
"debowerify"
]
},
}
Estoy importando Backbone en main.js (o solo subrayado ... no importa)
import Backbone from ''backbone'';
Y en la consola recibo un error
Unkeught TypeError: no se puede leer la propiedad ''_'' de undefined
Comprobé el código y descubrí que en las fuentes de subrayado al inicio de la root
de la biblioteca no está definido
// Establish the root object, `window` in the browser, or `exports` on the server.
var root = this;
// Save the previous value of the `_` variable.
var previousUnderscore = root._;
Creo que el problema es que debowerify o babelfy está envolviendo código en alguna función. Pero también si uso módulos de nodo sin debowerify todo funciona bien. Pero quiero usar Bower.
Entonces, ¿cómo solucionar este problema?
En mi caso, el mismo error surgió al usar solo browserify con guión bajo. He solucionado el problema al cambiar de subrayado a lodash. Son en general (seguramente no completamente) compatibles, pero en el peor, prefiero copiar alguna función que falta de las fuentes de subrayado que vivir con su enfoque de carga desadaptada.
A cualquier visitante futuro a esta pregunta,
esto es similar a Underscore da error cuando se empaqueta con Webpack
La esencia del problema es que babel probablemente está ejecutando el código underscore.js, ya que underscore.js usa this
, y en es6 this
no está definido cuando está fuera de una función, naturalmente this._
falla.
En el código, he resuelto el problema asegurándome de que babel no se ejecute en node_modules.