Я пытаюсь получить ленивые загруженные угловые модули, работающие с Webpack, но у меня есть некоторые трудности. Кажется, что Webpack генерирует точку разделения правильно, потому что я вижу созданный 1.bundle.js
код, который содержит код для дочернего приложения, но я не вижу никакого запроса для 1.bundle.js
при загрузке страницы, а дочернее приложение не инициализируется. console.log
никогда не срабатывает, и, похоже, он даже не доходит до точки, где $oclazyload
будет инициализировать модуль.Lazy loading Угловые модули с Webpack
Есть несколько моментов, когда я смущен.
1) Будет ли webpack делать запрос на сервер, или мне нужно загрузить второй пакет вручную? (Я пробовал и то, и другое)
2) Если мне нужно загрузить пучки вручную, в каком порядке они должны быть загружены?
3) Третий аргумент require.ensure
предположительно позволяет вам управлять именем пакета, но пучок имеет имя 1.bundle.js
независимо от того, какую строку я передаю.
4) Почему я не могу выполнить код внутри блока require.ensure
в отладчике? Когда я делаю, так что я в конечном итоге смотреть на это с точки зрения источника 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() {
}
})
}]);
Ребенок приложение:
'use strict';
import childAppTemplateURL from '../templates/child-app.html';
import childAppController from './controllers/childAppController';
export default angular.module('parentApp.childApp', [])
.component('applicationListApp', {
templateUrl: childAppTemplateURL,
controller: childAppController
});