我在我的网站上使用Telerik kendo控件,其中包含大量.js
个文件。
我已经配置了这样的requirejs:
require.config({
baseUrl: '@Url.Content("~/Scripts/lib")',
paths: {
app: '../app',
jquery: 'jquery-2.2.4',
knockout: 'knockout-3.4.0',
bootstrap: 'bootstrap.min',
kendo: 'kendo/js',
underscore: 'underscore'
}
});
我的文件夹结构如下所示:
Scripts
app
app-related-stuff.js
lib
jquery-2.2.4.js
knockout-3.4.0.js
bootstrap.min.js
underscore.js
kendo
js
kendo.all.min.js
kendo.angular.min.js
kendo.aspnetmvc.min.js
kendo.autocomplete.min.js
...
kendo.grid.min.js
...
kendo.web.min.js
kendo.window.min.js
但是,如果我像这样引用一个剑道模块:
require(["kendo.grid.min"], function (kendo) {
...
});
我在浏览器开发工具中找到了404未找到的显示此路径:
http://localhost:2783/Scripts/lib/kendo.grid.min.js
它没有拿起我的路径配置并将其指向kendo/js
,即使它以单词kendo
开头。
如何配置requirejs以正确执行此操作,因此我不必为数百个kendo .js
文件手动添加路径?
答案 0 :(得分:1)
paths
映射中存在一种模式匹配形式,但它是有限的一种,仅适用于通过在正斜杠上拆分模块名称并查看{{1 }}。如果您执行paths
RequireJS将在require(["foo/bar/baz"])
地图中检查这些内容:
paths
。如果找到,将使用模块路径的相应值。
"foo/bar/baz"
。如果找到,将相应的值与"foo/bar"
组合以形成模块路径。
"baz"
。如果找到,将相应的值与"foo"
组合以形成模块路径。
RequireJS不会执行比此更精细的模式匹配。如果"bar/baz"
中有"foo/ba"
之类的内容,则在尝试解析paths
时会完全忽略"foo/bar/baz"
1}}。不支持shell和类似工具或正则表达式支持的globs。
选项:
将所有Kendo文件放在lib
下。它们都以kendo.
开头,因此无论如何都很容易识别。
为Kendo文件创建最小映射。 paths
将包含k: "kendo/js"
,您可以将Kendo文件称为"k/kendo.grid.min"
,依此类推。
编写脚本以生成RequireJS配置。它将扫描包含Kendo文件的目录,并创建一个paths
,每个文件包含一个条目。