select2 + requirejs:无法捆绑 i18n 文件

Posted

技术标签:

【中文标题】select2 + requirejs:无法捆绑 i18n 文件【英文标题】:select2 + requirejs: Cannot bundle i18n files 【发布时间】:2017-01-31 14:58:26 【问题描述】:

我一直在尝试在我的生产环境中保存一些 ajax 调用。为此,我捆绑并缩小了我的一些脚本,但我在 select2 和它的翻译文件上苦苦挣扎。

我在 build.js 中包含了 jQuery + bootstrap +(很多 deps)+ select2 + select2 i18n 文件并设置了 shim 值(我认为不需要)。

jquery 和 select2 都粘贴在 i18n 文件之前。

添加了以下配置(在生产环境中):

requirejs.config(
    bundles: 
        'built': [
            'jquery',
            'bootstrap',
            'highcharts',
            'bootbox',
            'datatables',
            'datatables-bootstrap',
            'i18n',
            'moment',
            'knockout',
            'knockout-mapping',
            'pnotify',
            'pnotify.nonblock',
            'pnotify.desktop',
            'pnotify.buttons',
            'select2/select2',
            'select2/i18n/pt-BR',
            'select2/i18n/es',
            'select2/i18n/en'
        ]
    
);

但是,当我尝试使用所有缩小的资源加载我的应用程序时,我在控制台上收到错误:

未捕获的类型错误:无法读取未定义的属性“定义”

在这一行:

(function()if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt-BR",[],function()

waitSecondsTimeout 过期几秒后:

未捕获的错误:模块加载超时: select2/i18n/pt-BR,select2/i18n/es,select2/i18n/en

应用程序在没有构建文件的情况下运行良好。

【问题讨论】:

【参考方案1】:

我遇到了类似的问题,不知道是什么原因造成的,延迟加载,或者浏览器使用多个线程加载 javascript,但我通过用这个包装 i18n 文件函数解决了这个问题

(function()if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)
                                                                           ^

注意添加的荣誉。

然后在文件末尾,在我添加的最后一个荣誉之前


else 
    window.setTimeout(arguments.callee,10);
)();

【讨论】:

伙计,你是大师。我在 django-jet 的 bundle.min.js 中遇到了同样的错误。一旦修复 node_modules/select2/.../en.js,.. 在“gulp build”之前,一切正常。谢谢!

以上是关于select2 + requirejs:无法捆绑 i18n 文件的主要内容,如果未能解决你的问题,请参考以下文章

带有 requirejs/AMD 的 Webpack

使用包时RequireJS模块加载超时

不使用jQuery以编程方式控制Select2

不使用 jQuery 以编程方式控制 Select2

webpack加载AMD模块而不捆绑

使用插件将RequireJS / AMD迁移到Webpack