Разделение кода Webpack Angular

В настоящее время у меня есть такой проект: введите здесь описание изображения Так как материал angular загружается в моем проекте очень часто, белый экран загружается около 45 секунд. Я пытаюсь выполнить разделение кода, чтобы ускорить загрузку моего приложения, но получаю ошибки. Разделение кода, похоже, не работает для меня.

ядро/app.module.js

'use strict';

require.ensure([], function (require) {

    require('angular/angular.min');
    require('angular-aria/angular-aria.min');
    require('angular-animate/angular-animate.min');
    require('angular-ui-router/release/angular-ui-router.min');

}, 'common');

var page1Module = require('./../page1/page1.module');
var page2Module = require('./../page2/page2.module');
var appRunBlock = require('./app.run');
var appConfig = require('./app.config');

var moduleName = 'app';

var app = angular.module(moduleName, [
        'ui.router',
        page1Module,
        page2Module
    ])
    .config(appConfig)
    .run(appRunBlock);

module.exports = moduleName;

страница1/page1.module.js

'use strict';

require.ensure([], function (require) {

    require('angular-material/modules/js/core/core.min.js');
    require('angular-material/modules/js/core/core.min.css');
    require('angular-material/modules/js/core/default-theme.js');
    require('angular-material/modules/js/button/button.min.js');
    require('angular-material/modules/js/button/button.min.css');

}, 'page1');

var page1Route = require('./page1.route');
var page1Controller = require('./page1.controller');

var moduleName = 'app.page1';

angular.module(moduleName, [
        'material.components.button'
    ])
    .config(page1Route)
    .controller('Page1Controller', page1Controller);

module.exports = moduleName;

страница2/page2.module.js

'use strict';

require.ensure([], function (require) {

    require('angular-material/modules/js/core/core.min.js');
    require.include('angular-material/modules/js/core/core.min.css');
    require.include('angular-material/modules/js/core/default-theme.js');
    require('angular-material/modules/js/toolbar/toolbar.min.js');
    require('angular-material/modules/js/toolbar/toolbar.min.css');
    require('angular-material/modules/js/content/content.min.js');
    require('angular-material/modules/js/content/content.min.css');
    require('angular-material/modules/js/input/input.min.js');
    require('angular-material/modules/js/input/input.min.css');

}, 'page2');

var page2Route = require('./page2.route');
var page2Controller = require('./page2.controller');

var moduleName = 'app.page2';

angular.module(moduleName, [
        'material.components.toolbar',
        'material.components.content',
        'material.components.input'
    ])
    .config(page2Route)
    .controller('Page2Controller', page2Controller);

module.exports = moduleName;

У меня есть этот webpack.config.js

var webpack = require('webpack');
var CopyWebpackPlugin = require('copy-webpack-plugin');
var path = require('path');

var webpack_config = {
    context: path.join(__dirname + '/app'),
    entry: {
        app: './core/app.module.js'
    },
    output: {
        path: path.join(__dirname + '/release'),
        publicPath: 'http://localhost:8080/',
        filename: '/js/[name].js',
        chunkFilename: '/js/[name].js'
    },
    module: {
        loaders: [
            {
                test: /\.css$/,
                exclude: 'node_modules',
                loader: 'style!css'
            },
            {
                test: /\.scss$/,
                exclude: 'node_modules',
                loader: 'style!css!sass'
            },
            {
                test: /\.html$/,
                exclude: 'node_modules',
                loader: 'ngtemplate?relativeTo=' + (path.join(__dirname, './app')) + '/!html?' +
                JSON.stringify({attrs: ['img:src', 'img:ng-src', 'md-icon:md-svg-src']})
            }
        ]
    },
    plugins: [
        new CopyWebpackPlugin([
            {from: './index.html', to: './index.html'}
        ])
    ],
    devServer: {
        contentBase: path.resolve('./release')
    },
    watch: true
};

module.exports = webpack_config;

Я пытался использовать require.include внутри require.ensure для загрузки моих файлов по мере необходимости, и это не работает. Я поместил свой путь к библиотекам в массив require.ensure([]), и он не работает.

Единственный раз, когда это работает, если я добавляю вторую запись в webpack.config.js и помещаю все свои библиотеки в общий блок с именем «поставщик» или если я использую require(), а не require.ensure().

Загрузка моей библиотеки угловых материалов занимает около 1,5 МБ и занимает около 30 секунд или 1 м. Когда приложение загружается, у него белый экран, пока не загрузятся все библиотеки. Вот почему мне нужно разделить код. Я использую webpack-dev-server, и он выдает следующие ошибки: введите здесь описание изображения

Пожалуйста помоги.


person coderdark    schedule 07.06.2016    source источник


Ответы (1)


похоже, мне нужно было использовать ocLazyLoading для динамической загрузки модулей. Я также узнал, что вам нужно знать место, а также триггер, когда вы хотите загрузить свои модули, шаблон или библиотеку. В моем случае мне нужно было загрузить мои модули с помощью ocLazyLoading на маршруте.

person coderdark    schedule 23.06.2016