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

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

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

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

最佳答案

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

我看到您可能可以使用的一种途径是onBuildWrite,这是一个具有功能的全局设置。我已将其用于除您想要的目的之外的其他目的,但是也许可以达到目的:

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

如果模块名称以widgets/开头,则将写入 bundle 包的内容将为空字符串,否则内容将与模块的内容恰好相同。

请注意,这不会完全像exclude那样。 exclude设置不包括列出的模块及其依赖性。上面的onBuildWrite示例与excludeShallow类似,因为将排除与正则表达式匹配的模块,但不会排除其依赖项。无法轻松编写onBuildWrite函数来将排除范围扩展到要排除的模块的依赖项。 r.js没有提供用于查询模块依赖性的API。

10-05 20:54
查看更多