我如何防止包括优化的文件中的文本插件Require.js优化?(How can I prevent

2019-06-23 17:08发布

TL;博士:我如何保持text.js插件我的优化文件时我所有的文本相关性内联?

我使用的是Require.js优化器 (通过节点),以优化一些JS文件在我的项目。 我使用文本插件加载文本依赖(HTML模板,CSS)。 我有一个模块,我想优化,包括它的依赖,就像这样:

define(['text!core/core.css'], function(styles) {
    // do setup stuff, return an object
});

该Require.js文档说, core/core.css当我运行该文件将被内联r.js优化,其中我调用是这样的:

$ r.js -o baseUrl=./src name=core out=release/test.js

Tracing dependencies for: core
Uglifying file: c:/path/release/test.js

c:/path/release/test.js
----------------
c:/path/src/text.js
text!core/core.css
c:/path/src/core.js

好消息是,这个工程。 当我看着优化的文件,我可以看到内联的文字,是这样的:

define("text!core/core.css",[],function(){return"some CSS text"}),
define("core",["text!core/core.css"],function(a){ ... })

坏消息是,也包括在text.js插件 - 它增加了3K左右,和由(据我可以告诉)现在完全不必要的代码加载外部文本文件。 我知道3K的并不多,但我想保持我的代码高度优化的,如果我的文字依赖性内联,据我了解文本插件的代码是不是在所有必要的。 我可以保持文本中加入插件进行exclude=text到我的r.js打电话,但如果我这样做,我得到一个错误,当我尝试使用优化的代码在浏览器中称text.js插件无法加载。

所以:

  1. 有没有对text.js插件实际上是在这里需要任何理由吗?

  2. 如果没有,是否有一个配置选项 r.js ,可以解决此行为,或

  3. 有一个简单的垫片的text.js插件,我可以包括说服Require.js了不必要的插件加载?

Answer 1:

真正需要的文本插件,因为RequireJS需要检查插件实现的方法normalize获取适当的模块ID之前。

从构建删除文本插件的方式是使用onBuildWrite设置来创建一个空的插件模块,在这个问题上的评论描述: https://github.com/jrburke/r.js/issues/116#issuecomment-4185237 - 此功能应该降落在r.js的未来版本

编辑:

r.js现在有一个设置称为stubModules这正是这么做的:

//Specify modules to stub out in the optimized file. The optimizer will
//use the source version of these modules for dependency tracing and for
//plugin use, but when writing the text into an optimized layer, these
//modules will get the following text instead:
//If the module is used as a plugin:
// define({load: function(id){throw new Error("Dynamic load not allowed: " + id);}});
//If just a plain module:
// define({});
//This is useful particularly for plugins that inline all their resources
//and use the default module resolution behavior (do *not* implement the
//normalize() method). In those cases, an AMD loader just needs to know
//that the module has a definition. These small stubs can be used instead of
//including the full source for a plugin.
stubModules : ['text']

欲了解更多r.js选项检查example.build.js文件。



文章来源: How can I prevent the Require.js optimizer from including the text plugin in optimized files?