我正在尝试在服务器端集成r.js优化器(Apache Sling)并面临一个问题:解析模块时,它总是在输出目录下查找它们({ {1}}),不在源目录(dir
或baseUrl
)内,找不到它们,因此失败。
appDir
如果您想知道,根路径({
name: "modules/main",
dir: "/target",
baseUrl: "/sources"
})
位于服务器的JCR存储库内,而不是文件系统。我也简化了一些例子(希望没有隐瞒这个问题)。
它将正确解析和读取主文件:
/
但是,当它现在尝试解析require(["modules/foo"]);
时,它会尝试从modules/foo
而不是/target/modules/foo.js
读取它,正如我所料,它不存在且整个r.js执行失败并停止。
我尝试使用/sources/modules/foo.js
和各种组合,但问题总是一样的。我相当肯定它与我的集成代码无关......来自文档和Google搜索的AFAIU,它应该在构建优化文件之前copy them to the target或者只是自动从源目录中提取它们。
appDir
?/target
与驻留在baseUrl=/overlay
内的build.js不同?/project
)可以位于dir
或appDir
之外吗?答案 0 :(得分:3)
我的require.js配置如下:
({
appDir: "../app",
baseUrl: "js/lib", // means the base URL is ../app/js/lib
dir: "../app-built", //target
// offtopic, but a very handy option
mainConfigFile: "../app/config.js",
// I'm not 100% sure if it's equivalent to your version
// where you're not using "modules" and just "name"
modules: [{
name: "../some/main" // this is ../app/js/some/main.js
}]
})
阅读https://github.com/jrburke/r.js/blob/master/build/example.build.js#L15 - 如果您希望在优化之前将文件复制到目标目录,您似乎确实需要指定appDir。
回答您的其他问题
我会说
我知道有一种不同的配置方式,你的输出是1个文件,在这种情况下,文件是从源目录中读取的 - 但我自己没有用过那么多。
希望这有帮助。
答案 1 :(得分:2)
回答自己:我使用out
而不是appDir
或dir
来使用单输出文件方法:
({
name: "modules/main",
baseUrl: "/sources"
out: "/target/out.js",
})
在这种情况下,它会从源中读取所有模块并创建一个/target/out-temp.js
,然后在完成后移动到/target/out.js
。
到目前为止,这似乎符合我的需要。