使用browserify和debowerify进行编译后,下划线中的"this"未定义

inf*_*-vv 6 underscore.js browserify gulp babeljs

首先......我有下一个gulp任务:

gulp.task('js', function() {
    browserify('./src/js/main.js')
        .bundle()
        .on('error', onError)
        .pipe( source('main.js') )
        .pipe( gulp.dest(path.build.js) );
});
Run Code Online (Sandbox Code Playgroud)

和package.json:

{
  "browserify": {
    "transform": [
      ["babelify", { "presets": ["es2015"] }],
      "debowerify"
    ]
  },
}
Run Code Online (Sandbox Code Playgroud)

我在main.js中导入Backbone(或者只是下划线......没关系)

import Backbone from 'backbone';
Run Code Online (Sandbox Code Playgroud)

在控制台我得到错误

未捕获的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._;
Run Code Online (Sandbox Code Playgroud)

我认为问题在于debowerify或babelfy是将代码包装在某个函数中.但是如果我使用没有debowerify的节点模块,一切正常.但我想用凉亭.

那么如何解决这个问题呢?

Den*_*mel 0

就我而言,仅使用带下划线的 browserify 时会出现相同的错误。我通过从下划线切换到 lodash 解决了这个问题。它们通常(肯定不完全)兼容,但在最坏的情况下,我宁愿从下划线源复制一些缺失的函数,也不愿接受其隔离的加载方法。