【发布时间】:2025-02-28 00:50:01
【问题描述】:
我正在使用 requireJS 来加载脚本。它有this detail in the docs:
用于模块名称的路径不应包含 .js 扩展名,因为路径映射可能是一个目录。
在我的应用程序中,我将所有脚本文件映射到配置路径中,因为它们是在运行时动态生成的(我的脚本以 order.js 之类的形式开始生命,但变成 order.min.b25a571965d02d9c54871b7636ca1c5e.js 之类的东西(这是一个哈希文件内容,用于缓存清除目的)。
在某些情况下,require 会在这些路径的末尾添加第二个 .js 扩展名。虽然我在服务器端生成动态路径然后填充配置路径,但我必须编写一些额外的 javascript 代码来从有问题的文件中删除 .js 扩展名。
阅读 requireJS 文档后,我真的不明白您为什么希望将路径映射用于目录。这是否意味着可以在一次调用中以某种方式加载整个目录的文件?没看懂。
有人知道是否可以强制要求停止将 .js 添加到文件路径中,这样我就不必绕过它了?
谢谢。
更新:根据要求添加了一些代码示例。
这是在我的 HTML 文件中(这是一个 Scala 项目,所以我们不能将这些变量直接写入 .js 文件):
foo.js.modules = {
order : '@Static("javascripts/order.min.js")',
reqwest : 'http://5.foo.appspot.com/js/libs/reqwest',
bean : 'http://4.foo.appspot.com/js/libs/bean.min',
detect : 'order!http://4.foo.appspot.com/js/detect/detect.js',
images : 'order!http://4.foo.appspot.com/js/detect/images.js',
basicTemplate : '@Static("javascripts/libs/basicTemplate.min.js")',
trailExpander : '@Static("javascripts/libs/trailExpander.min.js")',
fetchDiscussion : '@Static("javascripts/libs/fetchDiscussion.min.js")'
mostPopular : '@Static("javascripts/libs/mostPopular.min.js")'
};
然后在我的main.js:
requirejs.config({
paths: foo.js.modules
});
require([foo.js.modules.detect, foo.js.modules.images, "bean"],
function(detect, images, bean) {
// do stuff
});
在上面的例子中,我必须使用字符串“bean”(它指的是需要路径)而不是我的直接对象(就像其他人使用foo.js.modules.bar)否则我会得到额外的.js。
希望这是有道理的。
【问题讨论】:
-
你能提供一个你的 require 函数调用的例子吗?你在使用 require.config() 吗?你的设置是什么?
-
谢谢 - 在上面添加了一些代码。使用 require.config() 只是将路径推送到 require 中。
-
变量 bean 不会解析为任何东西(没有引号)。您必须使用完整的 foo.js.modules.bean 参考。就个人而言,我使用引用的形式,所以我不确定会发生什么。
-
不确定我是否遵循 - 我 am 将它与引号一起使用,除了在回调参数中,但我不希望它在那里成为字符串。当我使用 foo.js.modules.bean 时,它会添加额外的“.js”扩展名。
-
我现在明白了。这可能被认为是一个错误,但我总是从 requirejs.config -> 路径中的所有条目中省略“.js”。如果这样做,您应该能够使用 foo.js.modules.ID 引用或字符串“ID”,然而根据模块本身的导出方式,您可能会遇到问题。例如,我无法使用 reference 方法来导入 jQuery,因为 jQuery 在 id "jquery" 下导出自己,但 requirejs 不知道将其与 "js/lib/" 匹配jquery-1.7.1" 路径下的条目。
标签: javascript requirejs