是否有可能从要求优化器构建配置中排除模块,但该模块及其依赖项分别优化

Is it possible to exclude a module from a require optimizer build config but have that module and it's dependencies be optimized separately?

本文关键字:模块 优化 依赖 排除 有可能 配置 构建 是否      更新时间:2023-09-26

所以情况是这样的:

我有一堆页面特定的js文件,我正在使用r.js优化。

其中99%定义了一个名为core.js的模块作为依赖项。Core有5个自己的依赖项

我想通过从优化版本的页面js文件中排除核心来利用缓存。

所以在我的build.js中,我尝试了以下内容:

modules: [
  {
     name : 'modules/core'
  },
  {
     name: 'homepage',
     exclude : ['modules/core']
  }
]

当我运行优化器时,它会优化两个模块/核心&首页还可以。

进入一个使用home .js的页面,问题是:core.js &它的依赖项被单独加载,导致7个请求而不是2个。

在上面的例子中,我想要实现的是:把主页。js和它的依赖项优化成一个文件,并在一个优化版本的core.js中加载,而不是在core.js和它的依赖项中单独加载。

这可能吗?

您有两个选择,在构建之后:

1)修改顶层加载,使modules/core在任何其他加载之前加载:

require(['modules/core'], function () {
  //Now do normal require stuff in here
});

使用另一个嵌套的require()调用,如果你看到它的模块在主页完成加载之前被请求。

2)插入要求。将core中的所有模块指向core文件的配置块。requirejs只会在多个模块id都指向core.js文件时获取一次:

require.config({
  paths: {
    'mod/one': 'modules/core',
    'mod/two', 'modules/core',
    ...
  }
});

或者看看这样的示例项目,它设置了加载一个通用层,然后是一个特定于页面的层,但在构建后不需要做源代码修改就可以工作(只是使用#1的变体,但将其设置为以源代码形式工作):

https://github.com/requirejs/example-multipage