Require.js在错误的路径中查找嵌套的依赖项
Require.js looking in the wrong path for the nested dependencies
我使用WebJars来管理我的JavaScript依赖项,这意味着我使用的大多数库都在Require.js基本路径之外。配置是自动创建的,适用于大多数库。我只对那些调用require()
来加载一些内部依赖项(通常只是外部文件)的库有问题,例如当.js.
这是库:时为生成的require.js配置
requirejs.config({"paths":{"when":["/webjars/when-node/3.5.2/when","when"]}});
此文件加载正确。但问题是它试图加载更多的文件:
...
var timed = require('./lib/decorators/timed');
var array = require('./lib/decorators/array');
var flow = require('./lib/decorators/flow');
var fold = require('./lib/decorators/fold');
...
我希望require.js使用when.js
的位置来确定其他所需文件的正确位置,例如:
/webjars/when-node/3.5.2/lib/decorators/timed.js
但不幸的是,require.js使用main.js
文件的位置作为基本路径,这显然会导致大量404错误和应用程序崩溃。
如何告诉require.js查找正确的子目录?
因此,根据RequireJS文档,这似乎是正确的行为。与CommonJS不同,每个require()
调用都是使用基本路径解析的(它是相对于基本路径的,而不是相对于调用它的文件的位置)。
解决这个问题的唯一方法(据我所知)是将依赖项配置为一个包。然后,包位置将用于路径解析,而不是通用的基本路径。对于提到的when
包,配置应该如下所示:
requirejs.config({
packages: [
{ name: 'when', location: '/path/to/when', main: 'when' }
]
});
为了为我当前或未来的所有依赖项自动修复这个问题,我用自己的解决方案取代了Scala Play Framework加载脚本,该解决方案将所有WebJar作为单独的包加载。
var require = {
callback : function () {
var packages = [];
var shim = {};
[
@for(webJarJson <- org.webjars.RequireJS.getSetupJson(routes.WebJarAssets.at("").url).values()) {
@Html(webJarJson.toString),
}
].forEach(function (webjar) {
if (webjar.paths) {
for (var name in webjar.paths) {
if (webjar.paths.hasOwnProperty(name)) {
packages.push({
name: name,
location: webjar.paths[name][0].replace(/'/[^'/]+$/, ""),
main: webjar.paths[name][1]
});
}
}
}
if (webjar.shim) {
for (var name in webjar.shim) {
if (webjar.shim.hasOwnProperty(name)) {
shim[name] = webjar.shim[name];
}
}
}
});
requirejs.config({
packages: packages,
shim: shim
});
}
}
相关文章:
- 猫鼬在特定记录中查找嵌套记录
- 带嵌套json的下划线js查找
- lodash查找匹配的键/嵌套键
- 类名,用于查找嵌套标记名并在Javascript中赋值
- 使用underscore.js在深度嵌套的JSON中查找值
- Require.js在错误的路径中查找嵌套的依赖项
- Expressjs Mongoose 查找嵌套的嵌入式文档未定义
- 在 JavaScript 中查找嵌套的重复数组.(嵌套数组 uniq in lodash/underscore)
- 查找嵌套 xml 节点的更简单方法
- 查找嵌套
- ,并对其进行修改
- 在 AJAX 响应中查找嵌套属性,这是 try/catch 的情况
- underline-js-查找嵌套对象
- 按值查找嵌套对象并返回查找到的对象键
- 在Immutable.js映射中查找嵌套对象的最佳方法
- 使用JS查找嵌套元素的HTML ID
- 查找嵌套HTML中文本节点的长度直至某一点
- 下划线查找嵌套对象
- 使用jQuery查找嵌套的DOM元素
- 根据在其中单击的链接查找嵌套的ul是哪个子元素
- 使用 jQuery 查找嵌套列表中包含特定文本的列表项