2

我知道有一些解决方案可以通过 javascript using 进行检索System.import,但是我想使用指令版本,因此我们不必为每个模板创建一个控制器。

我想要实现的是提取作为条目文件发送的所有文件的列表,具有特定的扩展名,并获取它们的捆绑名称。

为简单起见,假设我有 3 个文件:

module-a.lazy.js
module-b.lazy.js
main.entry.js

假设我的入口点和输出定义如下:

var config = {
    entry: {
        module-a: "./module-a.lazy.js",
        module-b: "./module-b.lazy.js",
        bundle: "./main.entry.js"
    },
    output: {
        filename: "[name]-[hash:4].js",
        path : '/build'
    }
}

显然,我将在我的构建文件夹中得到 3 个文件,每个文件的文件名中都有一个自定义动态哈希,我无法将其输入到 ocLazyLoad 指令中。

在 main.entry.js 文件中,我有一个常量设置,我想用惰性文件的输出名称替换它。

angular.module('demo', [])
    .constant('lazies', '%lazyfilenamehere%');

预期的输出将是这样的:

angular.module('demo', [])
    .constant('lazies', ['/build/module-a.lazy-af34.js','/build/module-b.lazy-fdg3.js']);

一旦我可以获得输出路径名并将它们存储在主包中,我可以轻松地装饰原始的 ocLazyLoad 指令,首先通过部分字符串搜索这个数组,匹配时它可以返回整个文件名并正常请求它。

4

1 回答 1

0

您甚至不需要指定入口点,一旦您开始使用动态导入,它们就会自动创建。使用类似的东西:

angular.module('demo', [])
        .constant('lazies', {
    'module-a' : () => import('module-a'), 
    'module-b' : () => import('module-b')
});

比将您的指令基于 ocLazyLoad 并及时获得完全匹配的惰性模块。

UPD:我开始认为可能有可能根据模块名称生成一组指令。比你可以简单地在任何你想要的地方使用它们!

于 2018-03-12T20:36:58.037 回答