qui*_*ton 4 javascript requirejs r.js
我已经在多页面Web应用程序中实现了requirejs,它工作正常,但现在我正在尝试使用r.js创建一个"所有"模块的单个文件,除了任何第三方库和框架,如jquery等...
细分的构建文件(build.js)如下所示:
({
baseUrl: "../",
out: "main-v0.1.js", //"charts-v0.1.js",
include: [
"bi/jquery/jquery.ui.autocomplete",
"bi/jquery/jquery.ui.combobox",
"bi/ui/investmentselector"
],
wrap: true,
exclude: [
'jquery', 'jqueryui', 'jcanvas', 'jqtools', 'prettyphoto', 'cssSandpaper', 'knockout', 'datatables', 'handlebars'
],
preserveLicenseComments: false,
optimize: "none", // "uglify", "uglify2"
paths: {
handlebars : 'lib/handlebars',
/*hb runtime : 'lib/handlebars.runtime',*/
jquery : 'lib/jquery-1.9.1',
jqueryui : 'lib/jquery.ui/jquery-ui-1.10.3.min',
jcanvas : 'lib/jcanvas.min',
jqtools : 'lib/jquery.tools/jquery.tools.min',
prettyphoto : 'lib/jquery/jquery.prettyphoto-3.1.5.min',
BI : 'bi/BI',
sliderconnect : 'bi/charts/slider-connect',
cssSandpaper : 'lib/csssandpaper/cssSandpaper',
csstransform : 'bi/enhance/csstransform',
knockout : 'lib/knockout-2.2.1',
datatables : 'lib/jquery/jquery.dataTables',
// jquery ui widgets
uicombobox : 'bi/jquery/jquery.ui.combobox',
uiautocomplete : 'bi/jquery/jquery.ui.autocomplete'
}
})
Run Code Online (Sandbox Code Playgroud)
jquery.ui.autocomplete.js和jquery.ui.combobox.js文件是自定义jqueryui小部件,没有任何define()包围它们.模块investmentselector.js(细分)看起来像这样......
define(['jquery',
'bi/templates/investmentselector.js',
'bi/jquery/datatables/investmentselector.js',
'lib/JSLinq/JSLINQ.js',
'uicombobox', 'uiautocomplete'], function ($, tmp, datatables, jsLinq, uicombobox, uiautocomplete) {
'use strict';
var methods = {
// ... code
};
return methods;
});
Run Code Online (Sandbox Code Playgroud)
当我运行r.js来构建名为'main-v0.1.js'的单个文件时,我得到的是这个......
Tracing dependencies for: D:/Files/Trunk/BestInvest.Select.Website/js/build/main
-v0.1.js
Error: Error: Module loading did not complete for: bi/ui/investmentselector, uic
ombobox, uiautocomplete
The following modules share the same URL. This could be a misconfiguration if th
at URL only has one anonymous module in it:
D:/Files/Trunk/BestInvest.Select.Website/js/bi/jquery/jquery.ui.autocomplete.js:
uiautocomplete, bi/jquery/jquery.ui.autocomplete
D:/Files/Trunk/BestInvest.Select.Website/js/bi/jquery/jquery.ui.combobox.js: uic
ombobox, bi/jquery/jquery.ui.combobox
at Function.build.checkForErrors (D:\Files\Trunk\BestInvest.Select.Website\j
s\build\r.js:27237:19)
Run Code Online (Sandbox Code Playgroud)
关于发生了什么的任何想法?
仅供参考,小部件代码(再次分解)看起来像这样......
$.widget("bi.bicombobox", {
_create: function () {
// ...code
},
_destroy: function () { }
});
Run Code Online (Sandbox Code Playgroud)
和...
$.widget("bi.biautocomplete", {
_create: function () {
// ...code
},
_destroy: function () { }
});
Run Code Online (Sandbox Code Playgroud)
任何有关这方面的帮助都会很棒,谢谢!
您的include选项使用模块的完整路径,而不是使用您已建立的缩写名称paths.使用您拥有的名称paths:
include: [
"uicombobox",
"uiautocomplete",
"bi/ui/investmentselector"
]
Run Code Online (Sandbox Code Playgroud)
我没有看到为最后一个定义的另一个名字,所以我原样离开了它.通常,您不希望foo: "path/to/foo"在您的内容中paths使用foo某些内容,有时path/to/foo在引用依赖项中的模块时有时会使用.你总是想在foo任何地方使用.在这里,r.js看uicombobox(以一个例子)并解决其路径paths.它认为"bi/jquery/jquery.ui.combobox"在include与仅仅通过增加解决它.js,并将其指向同一文件作为第一个案例.然后它意识到它有两个指向同一文件的模块,无法处理文件,因为最终文件只需要与一个模块相关联.
我还注意到你的define调用列出了.js扩展的一些依赖项.这违背了未指定扩展名的建议做法.有时延伸,有时不延伸,可能会引起像我上面所解释的那样的问题.