Javascript RequireJS优化和文本插件
我正在使用RequireJS优化器来优化也使用文本插件的模块。为了没有文字!插件加载一次又一次与每个优化模块,我这样做Javascript RequireJS优化和文本插件,javascript,node.js,requirejs,requirejs-optimizer,Javascript,Node.js,Requirejs,Requirejs Optimizer,我正在使用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",[],func
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>"})
或者其他一些选项可以优化具有文本依赖关系的模块,同时又不会扼杀我动态使用它的能力 事情是这样的。如果所有内容都通过
文本加载代码>已通过r.js
进行优化,然后所有文本都已包含在r.js
的输出中,您可以存根插件
但是,如果您希望能够使用文本
要加载未通过优化过程的文本,则必须具有文本代码>插件在运行时可用。在这种情况下,您不能将其存根,否则RequireJS将无法加载您未优化的文本,因为不会有文本代码>RequireJS要使用的插件
在包含由文本加载的模块的应用程序中代码>已通过文本优化和加载模块代码>未优化的,将发生以下情况:
- 对于已优化的模块,RequireJS将找到一个带有模块名称的
define
调用(因为这是r.js
的一部分)。例如,define(“text!foo)”,[…],function(…)
。在这种情况下,RequireJS不会尝试使用text!
插件加载此模块。它只会直接加载模块。(这必须是真的,否则只要需要任何使用文本!
的优化模块,stub插件就会导致RequireJS失败。)
- 对于尚未优化的模块,RequireJS将要求
text!
加载该模块
除非采取特殊措施,r.js
在一组模块的依赖项中找到整个文本!
插件时,会自动包含该插件
因此,要特别排除文本模块,请使用excludeshalf
选项
node r.js -o name=Main excludeShallow=text out=main-master-built-text-path.js
你有没有试着不去存根文本
插件。我希望如果你加载任何定义了名称的东西(例如定义(“text!f.htm”,…)
),它会在不使用插件的情况下加载。然后加载任何没有命名定义的东西(未优化)将使用文本
插件。如果我不存根文本插件,则整个文本插件将加载并转储到优化文件中:(如果你想使用text!
加载未经过优化过程的文本片段,那么你需要在某个地方提供插件。当然可以。但是当应用程序运行时,text
将已经存在。没有办法将这些知识烘焙到优化器中吗?或者甚至可以动态重命名它是为了优化文件的目的而使用的,比如说textopt
。因此,我认为它可以归结为当r.js在一组模块的依赖项中找到它时,可以采取哪些特殊措施来避免它包含整个text!
插件。显然,存根不是一个选项。有可能吗省略text!
插件,但仍然加载text!foo
?可以省略插件,仍然加载text!foo
,前提是text!foo
已通过r.js
进行优化,并且您不尝试加载带有text!
的未优化模块。这是我想要的。我希望您不介意我将其编辑到您的答案中,并向上投票/接受。您真的很好地解释了其他一切。编辑很好。我仍然不明白您为什么要排除文本!
,特别是因为您的用例是“正常使用文本模块”所以你必须拥有它……还是你想在RequireJS加载优化包之前使用它?(在RequireJS站点上记录的典型使用场景中,优化包是整个应用程序的入口点。)我会有一堆这些优化的文件。我不想每次都复制text.js。
node r.js -o name=Main excludeShallow=text out=main-master-built-text-path.js