2016-06-07 65 views
1

我目前有一個項目像這樣設置:enter image description here由於角度材料是我的項目的一個大的下載,白色屏幕保持加載大約45s。我正在嘗試做一些代碼分割,使我的應用程序加載速度更快,但我得到的錯誤。代碼拆分似乎不適用於我。Webpack Angular Code Splitting

芯/ 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因爲我需要他們來加載我的文件,這是行不通的。我把我的libs路徑放在require.ensure([])數組中,它不起作用。

如果我在webpack.config.js中放入第二個條目,並將所有庫放在一個名爲'vendor'的公共塊中,或者如果我使用require()not require.ensure(),那麼它工作的唯一時間。

加載我的角度材料庫約爲1.5 MB,大約需要30秒或1米。當應用程序加載它有一個白色的屏幕,直到所有的庫加載。這就是我需要編碼拆分的原因。我正在使用webpack-dev-server,它會引發以下錯誤enter image description here

請幫忙。

回答

0

它看起來像我需要使用ocLazyLoading動態加載模塊。我還了解到,當你想要加載你的模塊,模板或庫時,你需要知道這個地方以及觸發器。在我的情況下,我需要加載我的模塊與ocLazyLoading在路線上。