[关闭]
@ChuckIsReady 2019-12-20T04:03:04.000000Z 字数 5571 阅读 520

webpack修改步骤

未分类


Steps:

  1. 1.install webpack packages
  2. 2.install loaders
  3. 3.install plugins
  4. 5.修改index.html
  5. 6.增加index.js
  6. 7.修改app/app.route.js
  7. 8.修改app/app.config.js
  8. 9.修改templateUrl
  9. 10.修改controller
  10. 11.修改directive
  11. 12.修改service
  12. 13.修改autoForm

install webpack packages

  1. npm install webpack webpack-cli webpack-dev-server webpack-merge -D

install loaders

  1. npm install style-loader css-loader html-loader extract-loader file-loader url-loader babel-loader @babel/core @babel/preset-env @babel/plugin-transform-runtime -D
  2. npm install @babel/runtime -S

install plugins

  1. npm install html-webpack-plugin clean-webpack-plugin mini-css-extract-plugin optimize-css-assets-webpack-plugin uglifyjs-webpack-plugin -D

修改index.html

  1. index.html里面script标签引入的第三方包移除

增加index.js

  1. index.js通过require引入第三方包
  1. require('bootstrap/dist/js/bootstrap.min.js');
  2. require('datatables.net-dt/js/dataTables.dataTables.min.js');
  3. require('datatables.net');
  4. require('angular');
  5. require('angular-translate/dist/angular-translate.min.js');
  6. require('angular-cookies/angular-cookies.min.js');
  7. require('angular-datatables/dist/angular-datatables.min.js');
  8. require('angular-ui-router');
  9. require('oclazyload/dist/ocLazyLoad.min.js');
  10. require('angular-resource/angular-resource.min.js');
  11. require('angular-aria/angular-aria.min.js');
  12. require('angular-animate');
  13. require('angular-messages/angular-messages.min.js');
  14. require('angular-material');
  15. require('angular-file-upload/dist/angular-file-upload.min.js');
  16. require('angular-websocket/dist/angular-websocket.min.js');
  17. require('angular-sanitize/angular-sanitize.min.js');
  18. require('datatables.net-dt/css/jquery.dataTables.min.css');
  19. require('angular-material/angular-material.min.css');
  20. require('angular-datatables/dist/css/angular-datatables.min.css');
  21. require('bootstrap/dist/css/bootstrap.min.css');
  22. require('font-awesome/css/font-awesome.min.css');
  23. require('./app/app.module.js');
  24. require('./app/app.route.js');
  25. require('./app/app.config.js');

修改app/app.route.js

  1. 修改lazyload引入方式,通过require.ensure引入
  1. .state('dashboard.container', {
  2. url: 'container',
  3. template: '<container></container>',
  4. resolve: {
  5. container: $ocLazyLoad.load([
  6. server_path + 'app/page/container/container.controller.js',
  7. server_path + 'app/page/container/container.css',
  8. ])
  9. }
  10. })
  1. .state('dashboard.container', {
  2. url: 'container',
  3. template: require('./page/container/container.html'),
  4. resolve: {
  5. container: ['$q', '$ocLazyLoad', function ($q, $ocLazyLoad) {
  6. let deferred = $q.defer();
  7. require.ensure([], function () {
  8. $ocLazyLoad.inject([
  9. require('./page/container/container.controller.js'),
  10. require('./page/container/container.css')
  11. ]);
  12. deferred.resolve();
  13. }, 'containerLazyLoad');
  14. return deferred.promise;
  15. }]
  16. }
  17. })

## 修改app/app.config.js

  1. 修改多语言的引用方式,改成require
  1. var prefixpath = dev?'app/i18n/':'static/app/i18n/';
  2. var lang = window.localStorage['lang'] || 'zh-hans';
  3. $translateProvider.preferredLanguage(lang)
  4. .useStaticFilesLoader({
  5. prefix: prefixpath,
  6. suffix: '.json'
  7. })
  8. .useSanitizeValueStrategy('escape');
  1. const en = require('./i18n/en.json');
  2. const zh = require('./i18n/zh-hans.json');
  3. let lang = window.localStorage['lang'] || 'zh-hans';
  4. $translateProvider.translations('en', en).useSanitizeValueStrategy('escape');
  5. $translateProvider.translations('zh-hans', zh).useSanitizeValueStrategy('escape');
  6. $translateProvider.preferredLanguage(lang);

修改templateUrl

  1. templateUrl改成template,并通过require引入,如果想用懒加载,可以用templateProvider
  1. templateUrl: localStorage.getItem("server_path") +'app/share/autoForm/auto-form-flat.html'
  2. template: require('./auto-form-flat.html')

修改controller

  1. 移除component里面的templateUrlcontrollercontrollerAs。增加module.exports,在component里面增加template,通过require导入。增加.controller,在html增加ng-controller
  1. angular.module('leapai')
  2. .component('userGM', {
  3. templateUrl: localStorage.getItem("server_path") + 'app/page/adminArea/userGM/userGM.html',
  4. controller: userGMController,
  5. controllerAs: 'userGM',
  6. bindings: {}
  7. });
  1. module.exports = angular.module('leapai')
  2. .component('userGM', {
  3. template: require('./userGM.html'),
  4. bindings: {}
  5. }).controller('userGMController', userGMController);
  6. <div ng-cloak ng-controller="userGMController as userGM">

修改directive

  1. directory以及directory里面的controller通过注入的方式注入$scope$timeout等变量
  1. angular.module('leapai')
  2. .directive('autoFormFlat', function($timeout) {
  3. return {
  4. restrict: 'E',
  5. scope: {
  6. options:'=options',
  7. },
  8. replace: false,
  9. templateUrl: localStorage.getItem("server_path") +'app/share/autoForm/auto-form-flat.html',
  10. controller:function ($scope) {
  11. ...
  1. angular.module('leapai')
  2. .directive('autoFormFlat', ["$timeout",function($timeout) {
  3. return {
  4. restrict: 'E',
  5. scope: {
  6. options:'=options',
  7. },
  8. replace: false,
  9. template: require('./auto-form-flat.html'),
  10. controller:["$scope",function ($scope) {
  11. ...

修改service

  1. 通过注入的方式注入$scope,$timeout等变量
  1. (function () {
  2. 'use strict';
  3. angular.module('leapai')
  4. .factory('usersSelect', usersSelect);
  5. function usersSelect($rootScope) {
  6. ...
  1. (function () {
  2. 'use strict';
  3. angular.module('leapai')
  4. .factory('usersSelect', usersSelect);
  5. usersSelect.$inject=['$rootScope'];
  6. function usersSelect($rootScope) {
  7. ...

修改autoForm

  1. 1. style修改成ng-style,如auto-form-dialog.html3行;

遇到的问题

  1. 1. 无法在html使用$,提示$ is not defined, ngIframe.directive.js12行;已修复
  2. 2. 控制台警告:Module not found: Error: Can't resolve 'bufferutil',Module not found: Error: Can't resolve 'utf-8-validate' 无需修复,经查询是未用上所以不打包
  3. 3. 无法在html使用<>,如jobConfig.html37行(已解决,< >改成&lt; &gt;);
  4. 4. ajax is not definedfileSystem.controller.js778行; 已修复
  5. 5. 翻译显示英文(已解决,修改successerrorinfo);已重写notify组件
  6. 6. directiveservicefactory注入变量;
  7. 7. 无法使用async await(已解决,增加@babel/plugin-transform-runtime插件);
  8. 8. 访问我的应用,控制台提示Cannot assign to read only property 'exports' of object '#<Object>'(以解决,在babel-loder增加配置sourceType: "unambiguous");
  9. 9. node_modules的部分第三方库被重复打包(已解决,将index.js引入的第三方库由min.js改为库名直接引入);

webpack性能优化

  1. 1. 升级webpacknpm版本;
  2. 2. 在尽可能少的模块使用loader
  3. 3. Plugin尽可能精简并确保可靠;
  4. 4. 使用Dllplugin提高打包速度;
  5. 5. vendors.js进行缓存(在生产环境使用contenthash,当内容发生改变时hash会发生变化;contenthash和热更新冲突,在开发环境使用hash);
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注