Javascript 使用网页包延迟加载角度模块
我试图让延迟加载的角度模块与Webpack一起工作,但我遇到了一些困难。Webpack似乎正确地生成了拆分点,因为我看到创建了一个包含子应用程序代码的Javascript 使用网页包延迟加载角度模块,javascript,angularjs,webpack,lazy-loading,oclazyload,Javascript,Angularjs,Webpack,Lazy Loading,Oclazyload,我试图让延迟加载的角度模块与Webpack一起工作,但我遇到了一些困难。Webpack似乎正确地生成了拆分点,因为我看到创建了一个包含子应用程序代码的1.bundle.js,但我在加载页面时没有看到任何对1.bundle.js的请求,并且子应用程序没有初始化。console.log似乎从未启动过,它甚至没有达到$oclazyload初始化模块的程度 有几点我感到困惑 1) webpack会向服务器发出请求,还是我必须手动加载第二个包?(我两个都试过了,但都不起作用) 2) 如果我确实需要手动加载
1.bundle.js
,但我在加载页面时没有看到任何对1.bundle.js
的请求,并且子应用程序没有初始化。console.log
似乎从未启动过,它甚至没有达到$oclazyload
初始化模块的程度
有几点我感到困惑
1) webpack会向服务器发出请求,还是我必须手动加载第二个包?(我两个都试过了,但都不起作用)
2) 如果我确实需要手动加载捆绑包,则应按什么顺序加载
3) require.sure
的第三个参数假定允许您控制捆绑包的名称,但不管传递什么字符串,捆绑包的名称都是1.bundle.js
4) 为什么我不能单步执行require中的代码。请确保调试器中的块?当我这样做时,我会在Chrome源代码视图中看到这一点:
undefined
/** WEBPACK FOOTER **
**
**/
(代码如下)
主要入口点代码:
'use strict';
import angular from 'angular';
import 'angular-ui-router';
import 'oclazyload';
angular.module('parentApp', [
'ui.router',
])
.config(['$urlRouterProvider', '$locationProvider', ($urlRouterProvider, $locationProvider) => {
$urlRouterProvider
.otherwise('/');
$locationProvider.html5Mode(true);
}])
.config(['$stateProvider', ($stateProvider) => {
$stateProvider
.state('child-app', {
url: '/child-app',
template: '<child-app></child-app>',
resolve: {
loadAppModule: ($q, $ocLazyLoad) => {
return $q((resolve) => {
require.ensure(['./child-app/app.js'], (require) => {
let module = require('./child-app/app.js');
console.log(module);
$oclazyload.load({name: 'childApp'});
resolve(module.controller);
});
})
}
},
controller: function() {
}
})
}]);
该问题与要求无关。请确保实施。这是因为ocLazyLoad
的打包方式有些奇怪()。在我的例子中,修复很简单,我只是在模块依赖项中添加了'oc.lazyLoad'
angular.module('parentApp', [
'ui.router',
'oc.lazyLoad'
])
为了回答我自己的两个问题,Webpack确实向服务器请求捆绑包,您不必手动加载捆绑包。有一个问题让我很困惑:resolve
块如果包含一个无法解决的承诺,它将无声地失败。在我的例子中,$ocLazyLoad.load()
失败,但没有失败的迹象。唯一的线索是状态提供程序没有向DOM添加
标记,这意味着它实际上是在初始化状态
angular.module('parentApp', [
'ui.router',
'oc.lazyLoad'
])