我正在使用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>"})
或者其他一些选项可以优化具有文本依赖性的模块,同时又不会破坏我动态使用它的能力?
答案 0 :(得分:3)
这是交易。如果通过text!
加载的所有内容都已使用r.js
进行了优化,那么所有文本都已包含在r.js
的输出中,您可以存根插件。
但是,如果您希望能够使用text!
加载不已通过优化过程的文本,那么您必须拥有text!
插件在运行时。在这种情况下,您不能将其存根,否则RequireJS将无法加载您未优化的文本片段,因为RequireJS不会使用text!
插件。
在包含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