Requirejs 需要.js优化器将所有文件复制到输出目录中吗?
我试图在服务器端集成r.js优化器()并面临一个问题:在解析模块时,它总是在输出目录下查找它们(Requirejs 需要.js优化器将所有文件复制到输出目录中吗?,requirejs,r.js,Requirejs,R.js,我试图在服务器端集成r.js优化器()并面临一个问题:在解析模块时,它总是在输出目录下查找它们(dir),而不是从源目录中查找(baseUrl或appDir),找不到它们,因此失败 /project/build.js 如果您想知道,根路径/在服务器的JCR存储库中,而不是文件系统中。此外,我还简化了示例(希望不会隐藏问题) 它将正确解析和读取主文件: /sources/modules/main.js 但是,当它现在尝试解析modules/foo时,它尝试从/target/modules/foo.
dir
),而不是从源目录中查找(baseUrl
或appDir
),找不到它们,因此失败
/project/build.js
如果您想知道,根路径/
在服务器的JCR存储库中,而不是文件系统中。此外,我还简化了示例(希望不会隐藏问题)
它将正确解析和读取主文件:
/sources/modules/main.js
但是,当它现在尝试解析modules/foo
时,它尝试从/target/modules/foo.js
读取它,而不是像我预期的那样,从/sources/modules/foo.js
读取它,因为它不存在并且整个r.js执行失败并停止
我尝试使用appDir和各种组合,但问题总是一样的。我相当确定它与我的集成代码无关。。。如果没有文档和谷歌搜索,它应该在构建优化文件之前或者直接从源目录自动获取它们
- 在运行r.js之前,我是否应该将所有原始源文件复制到自己的
/target
- 可能问题在于
与驻留在baseUrl=/overlay
中的build.js不同/project
- 也许r.js还会查看r.js进程的当前工作目录(在我的例子中,到目前为止还没有定义)
- 输出目录(
)是否可以位于dir
或appDir
之外baseUrl
({
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
}]
})
通读-如果您希望在优化之前将文件复制到目标目录,那么似乎确实需要指定appDir
回答你的其他问题
- 您不需要手动复制文件
- baseUrl应指向与应用程序配置中使用的baseUrl相同的位置-但是您必须根据您选择使用的appDir进行调整(例如appDir=“../app”和baseUrl=“js/lib”,或appDir=“../app/js”然后baseUrl=“lib”等)
- appDir和dir应该是相对于构建配置文件的-我不知道使用绝对路径时会发生什么
- 是-输出目录在appDir之外存在(必须?)。BaseURL位于appDir/dir中(所有这些名称都非常令人困惑..)
希望这能有所帮助。回答我自己:我使用
out
而不是appDir
或dir
的单一输出文件方法实现了这一点:
({
name: "modules/main",
baseUrl: "/sources"
out: "/target/out.js",
})
在本例中,它从源代码读取所有模块,并创建一个/target/out temp.js
,完成后将其移动到/target/out.js
到目前为止,这似乎适合我的需要。谢谢你详细的回答!我使用了
appDir
(绝对或相对),但它从不尝试复制所有文件。通过连接到文件访问函数的调试日志,我看到的是:a)读取build.js
文件b)删除dir
(全新开始)c)将主文件从源文件复制到输出目录d)从输出目录读取并解析主文件,e)尝试从输出目录内部查找foo
依赖项,不是源(当然失败)。我错过了最初的复制递归步骤(如果这是appDir
应该做的)。我还尝试使用modules
而不是main
,但没有成功:(我会继续挖掘,你的回答至少让我知道了预期的结果。我找到了“在输出为1个文件的情况下配置它的方法”要工作,只需使用out
。查看我自己的答案。嘿,Alexander,你有没有尝试过在模块上实现这一点,我遇到了与上面描述的相同的问题,但在我的情况下,我希望它能与模块一起工作,否则我会为多页站点使用一堆配置脚本否,单个串联输出文件对我的cas来说很好e、 我还是为每个输出定义了一个配置文件。
({
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
}]
})
({
name: "modules/main",
baseUrl: "/sources"
out: "/target/out.js",
})