使用Webpack& amp;代码拆分/延迟加载ocLazyLoad

时间:2017-05-01 02:07:27

标签: javascript webpack lazy-loading webpack-2 oclazyload

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

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

为了简单起见,我说我有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指令,首先通过部分字符串搜索此数组,匹配时可以返回整个文件名并按正常方式请求

1 个答案:

答案 0 :(得分:0)

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

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

比你的指令基于ocLazyLoad并准确地让你的懒惰模块完全匹配。

UPD:我开始认为可能会根据模块名称生成一组指令。你可以随意在任何地方使用它们!