RequireJS - 按目录排除(或正则表达式)

时间:2015-05-04 18:56:56

标签: javascript requirejs r.js

这是我为requireJS的优化器r.js构建配置的一部分。

exclude: [
    'widgets/cr-log-display',
    'widgets/cr-pager',
    'widgets/cr-time-input'

我的问题很简单:是否可以排除以widgets/开头的所有依赖项。

文档似乎并不表示可以在此处传递正则表达式或类似内容。我还缺少另一个配置参数吗?

1 个答案:

答案 0 :(得分:2)

我很确定你不能将正则表达式传递给exclude。我是在阅读r.js的来源时说的。 exclude的处理使用名为findBuildModule的内部函数,该函数将传递给exclude的内容函数与===的模块名称进行比较。同样,没有办法告诉r.js“排除此目录下的所有模块”。

我看到你可以使用的一个途径是onBuildWrite,这是一个带有功能的全局设置。我已经将它用于其他目的而不是你想要的东西,但也许这可以解决问题:

onBuildWrite: function (moduleName, path, contents) {
    return /^widgets\//.test(moduleName) ? "" : contents;
}

如果模块名称以widgets/开头,那么将写入包的内容将是空字符串,否则内容将是模块内容的任何内容。

请注意,此 exclude设置排除了列出的模块其依赖项。上面的exclude示例与onBuildWrite类似,因为将排除与正则表达式匹配的模块,但不会排除它们的依赖关系。没有办法轻松编写excludeShallow函数,该函数会将排除扩展到您要排除的模块的依赖项。 onBuildWrite没有提供API来查询模块的依赖关系。