我正在使用一个库(非常自私,恕我直言)假设 baseUrl 将指向公司的 CDN:
baseUrl: "[http protocol slash slash]cdn.wijmo.com/amd-js/"
起初我以为我只需将上述 Url 的内容复制到我自己的文件夹(例如 /scripts/wijmo/amd-js),但这不起作用,因为 Wijmo 的好人在他们的 AMD 中硬编码路径引用定义语句,例如:
define(["./wijmo.widget"], function () { ... });
上面的意思(如果我理解正确的话)是如果您有任何其他非 Wijmo AMD 模块,那么您必须:
(a) 将它们放在 amd-js 路径下,可能在名为“myScripts”的子文件夹中 (b) 使用硬编码的 RequireJS 路径引用到您自己的 AMD,如下所示:
paths: {
"myAMD_1": "http://www.example.com/scripts/myScripts/myAMD_1",
"myAMD_2": "/scripts/myScripts/myAMD_2.js"
}
(a) 有效,但这意味着 baseUrl 无法指向 Wijmo CDN,因为我无权访问 Wijmo CDN 站点,因此我必须将在 amd-js 下发布的文件移动到我自己的服务器上。
(b) 某种工作,这是我的问题:如果我使用语法 myAMD_1 那么一切都很好。但这并不能让我在使用 localhost 的本地开发机器上进行测试。(我不想检测我正在运行的服务器并自定义路径值......我希望路径在发布到我的 http 服务器之前和之后保持不变。)
现在,根据 RequireJS 文档:
有时您确实想直接引用脚本,但不符合查找它的“baseUrl + 路径”规则。如果模块 ID 具有以下特征之一,则该 ID 将不会通过“baseUrl + 路径”配置传递,而只会被视为相对于文档的常规 URL: * 以“.js”结尾。* 以“/”开头。* 包含 URL 协议,如“http:”或“https:”。
当我尝试使用 .js 结束(终止)我的路径引用时(如上面的 AMD_2 所示),RequireJS 找不到我的 AMD,因为它最终会寻找 myAMD_2.js.js(注意两个 .js 后缀)。所以看起来 RequireJS 不再尊重文档所说的它用作路径解析算法的内容。由于 .js 后缀无法正常工作,我无法轻松修复对我自己的 AMD 的引用,因为我不确定它们将发布到什么服务器名称或物理路径结构——我真的想使用相对路径.
最后,我不想更改 Wijmo 的 AMD 模块,不仅因为它们有几十个,而且因为每次他们发布 Wijmo 更新时我都需要重新应用我的自定义。
因此,如果我的 baseUrl 必须指向硬编码的 Wijmo 路径,那么我如何使用自己的 AMD,而不将它们放在 Wijmo 路径下的子文件夹中,并且不对我自己的 AMD 的发布位置做出任何固定路径或 Url 假设?