防止文本优化!和json!插件在requirejs优化工具上

时间:2014-04-23 17:51:52

标签: javascript requirejs requirejs-text requirejs-optimizer

我正在使用以下架构来实现基于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

1 个答案:

答案 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:" }
  • 的路径