如何配置requirejs路径以将多个模块指向文件夹?

时间:2016-07-12 15:29:39

标签: javascript kendo-ui requirejs

我在我的网站上使用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文件手动添加路径?

1 个答案:

答案 0 :(得分:1)

paths映射中存在一种模式匹配形式,但它是有限的一种,仅适用于通过在正斜杠上拆分模块名称并查看{{1 }}。如果您执行paths RequireJS将在require(["foo/bar/baz"])地图中检查这些内容:

  1. paths。如果找到,将使用模块路径的相应值。

  2. "foo/bar/baz"。如果找到,将相应的值与"foo/bar"组合以形成模块路径。

  3. "baz"。如果找到,将相应的值与"foo"组合以形成模块路径。

  4. RequireJS不会执行比此更精细的模式匹配。如果"bar/baz"中有"foo/ba"之类的内容,则在尝试解析paths时会完全忽略"foo/bar/baz" 1}}。不支持shell和类似工具或正则表达式支持的globs。

    选项:

    1. 将所有Kendo文件放在lib下。它们都以kendo.开头,因此无论如何都很容易识别。

    2. 为Kendo文件创建最小映射。 paths将包含k: "kendo/js",您可以将Kendo文件称为"k/kendo.grid.min",依此类推。

    3. 编写脚本以生成RequireJS配置。它将扫描包含Kendo文件的目录,并创建一个paths,每个文件包含一个条目。