带有webpack jQuery的NodeJS。延迟的异常:o(...)。select2不是函数TypeError:o(...)。select2不是函数

时间:2019-06-05 15:34:08

标签: javascript jquery node.js jquery-select2 browserify

我正在修改我的应用程序以使用nodejs,并通过gulp通过browserify生成一个缩小的js。
我已经从手动加载依赖项和手动更新切换为使用npm安装它们。

一切顺利,但是当我想安装select2时,它开始到处抛出错误。当我为npm required()文件移动了已删除的手动更新文件时。

  

jquery.js:3841 jQuery.Deferred异常:o(...)。select2不是函数TypeError:o(...)。select2不是函数
     在i.init(https://www.example.com/newstyle/js/closure.js?time=1559747711:1:5612)处
     在i.sysInit(https://www.example.com/newstyle/js/closure.js?time=1559747711:1:108153)处
     在我(https://www.example.com/newstyle/js/closure.js?time=1559747711:1:106602
     在新的我(https://www.example.com/newstyle/js/closure.js?time=1559747711:1:5333
     在HTMLSelectElement处。 (https://www.example.com/newstyle/js/closure.js?time=1559747711:1:108496
     在Function.each(https://www.example.com/newstyle/js/closure.js?time=1559747711:1:200628
     位于_.fn.init.each(https://www.example.com/newstyle/js/closure.js?time=1559747711:1:199273
     在_.fn.init.d.fn。(匿名函数)[作为FormDropdownHandler](https://www.example.com/newstyle/js/closure.js?time=1559747711:1:108384
     在HTMLDocument。 (https://www.example.com/newstyle/js/closure.js?time=1559747711:1:108696
     在HTMLDocument.dispatch(https://www.example.com/newstyle/js/closure.js?time=1559747711:1:240241)上未定义

     

dropdown.module.js:53未捕获的TypeError:o(...)。select2不是函数
     在i.init中(dropdown.module.js:53)
     在i.sysInit(oc.foundation.base.js:157)
     在我(oc.foundation.base.js:20)
     在新的我(dropdown.module.js:19)
     在HTMLSelectElement处。 (oc.foundation.base.js:191)
     在Function.each(jquery.js:367)
     在_.fn.init.each(jquery.js:202)
     在_.fn.init.d.fn。(/匿名函数)[作为FormDropdownHandler](https://www.example.com/newstyle/js/closure.js?time=1559747711:1:108384
     在HTMLDocument。 (oc.foundation.base.js:213)
     在HTMLDocument.dispatch(jquery.js:5237)

我正在使用的代码是:

<select name="pickup_point">
    <option value="1" >all work</option>
    <option value="4" >no play</option>
    <option value="5" >dull boy</option>
</select>

和javascript:

$ = require('jquery');
require('select2');
$(document).ready(function(){
    $('select').select2();
});

在index.js文件中需要select2时如何使它工作?

1 个答案:

答案 0 :(得分:0)

花点时间整理一下这里出了什么问题。

归结为Select2使用它自己的加载程序和工厂函数来初始化自身,默认情况下不会调用它。您需要手动调用它。

如果您有一个窗口对象并将jQuery注册到该窗口对象,则可以在主JavaScript文件中按一次如下所示调用Select2:

window.$ = window.jQuery = require('jquery);
require('select2')();

或者如果您更喜欢变量而不是直接在require上调用函数:

window.$ = window.jQuery = require('jquery);
var select2Initialisator = require('select2');
select2Initialisator();

如果您想使用范围或不同版本的jQuery,还可以将希望将select2注册到的jQuery实例传递给select2工厂构造函数,如下所示

 var jQuery = require('jquery');
 require('select2')(jQuery);