Javascript 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

我正在使用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>"})

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

事情是这样的。如果所有内容都通过
文本加载已通过
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