首先......我有下一步的任务:
gulp.task('js', function() {
browserify('./src/js/main.js')
.bundle()
.on('error', onError)
.pipe( source('main.js') )
.pipe( gulp.dest(path.build.js) );
});
和package.json:
{
"browserify": {
"transform": [
["babelify", { "presets": ["es2015"] }],
"debowerify"
]
},
}
我在main.js中导入Backbone(或者只是下划线......它并不重要)
import Backbone from 'backbone';
在控制台中我收到错误
未捕获的TypeError:无法读取属性' _'未定义的
我检查了代码,发现在库root
开头的下划线源中未定义
// 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._;
我认为问题在于debowerify或babelfy在某些功能中包含代码。但是如果我使用没有debowerify的节点模块,一切正常。但我想用凉亭。
那么如何解决这个问题?
答案 0 :(得分:0)
在我的情况下,使用带下划线的browserify时出现了同样的错误。我通过从下划线切换到lodash来解决问题。它们通常(肯定不是完全)兼容,但最糟糕的是我宁愿从下划线源复制一些缺失的函数,而不是使用它的deisolated加载方法。
答案 1 :(得分:0)
对于此问题的任何未来访问者,
这类似于Underscore gives error when bundling with Webpack
问题的关键在于babel可能正在运行underscore.js代码,因为underscore.js使用this
,并且在es6 this
中,当函数外部未定义时,自然this._
1}}失败了。
在代码中我通过确保babel不在node_modules上运行来解决问题。