Gulp 巴别塔和打字机问题

svmlkihl  于 2022-12-08  发布在  Gulp
关注(0)|答案(1)|浏览(158)

在node.js项目中使用babel时,我试图将所有文件捆绑到一个单独的transpiled和minified js文件中。
我正在运行巴别塔与gulp-babel 6.1.2,我已经安装了ES-2015预设(6.13.2)。
我正在用我的文件构建一个包,并在0.11.1之前键入,问题是当运行gulp任务并通过babel管道时,typeahed功能不工作(未捕获的TypeError:无法设置未定义的属性'Bloodhound')。如果我再次运行任务,从管道中删除babel命令,一切都工作正常。
我知道我可以构建两个独立的包,一个用于我的文件,另一个用于外部文件,但我想知道为什么它失败了。
我任务的一饮而尽:

gulp.task('bundleCheckoutDesktopJs', function () {
var js = ['./src/js/project/external/*', './src/js/project/common/*', './src/js/project/*'];

return gulp.src(js)
    .pipe(babel())
    .pipe(concat('project.min.js'))
    .pipe(uglify())
    .pipe(gulp.dest('statics/js/'));
});

经过一段时间的调查,我取得了以下结果(typeahead.js):

(function(root, factory) {
   if (typeof define === "function" && define.amd) {
      define("bloodhound", [ "jquery" ], function(a0) {
          return root["Bloodhound"] = factory(a0);
      });
   } else if (typeof exports === "object") {
      module.exports = factory(require("jquery"));
   } else {
     // Root seems to be undefined here....
     root["Bloodhound"] = factory(jQuery);

   }
})

任何帮助都将不胜感激,提前表示感谢。

eivnm1vs

eivnm1vs1#

插件代码:在立即调用的函数中,将第一个参数指定为window。如果使用箭头函数,可能找不到this上下文。

/*!
 * typeahead.js 0.11.1
 * https://github.com/twitter/typeahead.js
 * Copyright 2013-2015 Twitter, Inc. and other contributors; Licensed MIT
 */

(function(root, factory) {
    if (typeof define === "function" && define.amd) {
        define("bloodhound", [ "jquery" ], function(a0) {
            return root["Bloodhound"] = factory(a0);
        });
    } else if (typeof exports === "object") {
        module.exports = factory(require("jquery"));
    } else {
        root["Bloodhound"] = factory(jQuery);
    }
})(this, function($) { // here replace 'this' with window

相关问题