我正在使用以下架构来实现基于multipages的多页应用程序: https://github.com/requirejs/example-multipage-shim
存储库解释了如何通过运行用于此类任务的命令行工具r.js来优化应用程序。
一切都应该可以正常工作,但我的项目是一些模块,它们具有执行HTTP GET请求的依赖项,以从服务器获取数据(可以是text或json)
这是因为某些页面使用的某些jsons和模板需要在服务器端进行本地化处理。
以下是展示我所说内容的基本示例:
define( function( require ){
var appLang = require('json!/pagelang/login'), //(a)
loginTemplate = require('text!/template/login'), //(b)
module = require('app/model/user'), //(c)
....
对我的服务器localhost / pagelang / login发出HTTP get请求 返回一个json
{
"hash": "translated_value",
...
}
同样适用于template/template_name
,其中从服务器返回将其UI翻译成用户语言的html。
通过运行r.js,它会尝试为服务器上的exirect目录目录加载这些位置,这显然不存在。
Tracing dependencies for: app/main/login
Error: Error: Loader plugin did not call the load callback in the build:
json:
json!/pagelang/login: Error: ENOENT, no such file or directory '/pagelang/login'
Module loading did not complete for: app/main/login
所以,我想阻止命令行工具优化文本!和json!模块。有可能吗?
我检查了requirejs构建设置,但我找不到解决问题的方法。有帮助吗? https://github.com/jrburke/r.js/blob/master/build/example.build.js
答案 0 :(得分:7)
当优化器运行时,json插件使用if (( config.isBuild && (config.inlineJSON === false || name.indexOf(CACHE_BUST_QUERY_PARAM +'=') !== -1)) || (url.indexOf('empty:') === 0)) {
,因此您有几个选项。
inlineJSON: false
,!bust
添加到json require的末尾。 require('json!/pagelang/login!bust')
或paths: { "/pagelang/login": "empty:" }
文字插件使用if (config.isBuild && !config.inlineText) {
和if (url.indexOf('empty:') === 0) {
inlineText: false
或paths: { "/template/login": "empty:" }