2

我正在使用 RequireJS 优化器来优化也使用文本插件的模块。为了没有文字!每个优化模块一遍又一遍地加载插件,我这样做

node r.js -o stubModules=text name=Main out=main-master-built.js

哪个有效,部分产生以下内容

define("text",{load:function(e){throw new Error("Dynamic load not allowed: "+e)}})
define("text!f.htm",[],function(){return"<h3>Hello World</h3>\r\n<h4>Bam</h4>"})

不幸的是,如上所示,我不能再“正常”使用文本插件。上面的错误存根阻止我添加文本!调用未优化的依赖列表。

有没有办法解决?有没有什么我可以放入的选项,比如说,将这些text引用动态更改为texto然后执行类似的操作

define("texto",{load:function(e){throw new Error("Dynamic load not allowed: "+e)}})
define("texto!f.htm",[],function(){return"<h3>Hello World</h3>\r\n<h4>Bam</h4>"})

或者其他一些选项可以优化具有文本依赖性的模块,同时又不会扼杀我继续动态使用它的能力?

4

1 回答 1

3

这是交易。如果通过 加载的所有内容text!都已使用 进行了优化r.js,则所有文本都已包含在 的输出中r.js,您可以存根插件。

但是,如果您希望能够使用text!加载尚未通过优化过程的文本那么您必须text!在运行时使用该插件。在这种情况下你不能存根它,否则 RequireJS 将无法加载你没有优化的文本片段,因为text!RequireJS 没有插件可以使用。

text!在包含已优化模块和未优化模块的应用程序中,text!将发生以下情况:

  • 对于一个已经优化的模块 RequireJS 会找到一个define带有模块名称的调用(因为这是它的一部分r.js)。例如,define("text!foo", [...], function(...). 在这种情况下,RequireJS 不会尝试使用text!插件来加载这个模块。它只会直接加载模块。(这必须是真的,否则text!一旦text!需要使用任何优化的模块,对插件进行存根会导致 RequireJS 失败。)

  • 对于尚未优化的模块 RequireJS 会要求text!加载该模块。

除非采取特殊措施,否则当它在一组模块的依赖项中找到整个插件时会r.js自动包含整个插件。text!

因此,要专门排除文本模块,请使用该excludeShallow选项。您的新命令行/bat 文件将如下所示:

node r.js -o name=Main excludeShallow=text out=main-master-built-text-path.js
于 2014-02-07T16:59:20.457 回答