javascript - Babel 和 typeahead 的问题

标签 javascript node.js gulp typeahead.js gulp-babel

在 node.js 项目中使用 babel 时,我试图将我的所有文件捆绑到一个转译和缩小的 js 文件中。

我正在使用 gulp-babel 6.1.2 运行 babel,我已经安装了 ES-2015 预设(6.13.2)。

我正在用我的文件和 typeahead 0.11.1 构建一个包,问题是当运行 gulp 任务并通过 babel 管道时,typeahed 功能不起作用(未捕获的 TypeError:无法设置未定义的属性 'Bloodhound')。
如果我再次运行任务,从管道中删除 babel 命令,一切正常。

我知道我可以构建两个单独的包,一个用于我的文件,另一个用于外部文件,但我想知道它为什么会失败。

我的 gulp 任务:

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

   }
})

任何帮助将不胜感激,在此先感谢。

最佳答案

插件代码:在立即调用函数中,将第一个参数设为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

关于javascript - Babel 和 typeahead 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38901707/

相关文章:

javascript - 如何在 pm2 中使用 Grunt/Gulp?

JavaScript 代码未按预期在网页上运行

javascript - 为什么在 foreach 循环中不能使用 Typescript 中的全局变量?

javascript - jQuery .one() 方法的问题

node.js - 离线运行 web-component-tester

JavaScript 将缓冲区中的十六进制字符串与 Python 进行比较

node.js - 如何在 Mongoose 中填充引用另一个模式的对象数组

javascript - 如何在 gulpfile.js 中使用 babel-polyfill

javascript - 使用 Javascript 或 PHP 从网页保存图像

javascript - 无需用户的 IdSrv3 身份验证