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

Lot*_*re1 0 javascript requirejs requirejs-text requirejs-optimizer

我正在使用以下架构来处理基于multipages multipus的应用程序: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)
        ....
Run Code Online (Sandbox Code Playgroud)

向我的服务器localhost/pagelang/login发出HTTP get请求,返回一个json

{
   "hash": "translated_value",
    ...
}     
Run Code Online (Sandbox Code Playgroud)

这同样适用于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
Run Code Online (Sandbox Code Playgroud)

所以,我想阻止命令行工具优化文本!和json!模块.可能吗?

我检查了requirejs构建设置,但我找不到解决问题的方法.有帮助吗? https://github.com/jrburke/r.js/blob/master/build/example.build.js

Nic*_*las 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:" }