es6+angular1.X+webpack 实现按路由功能打包项目的示例


Posted in Javascript onAugust 16, 2017

需求来源

之前使用jspm来打包项目 但是有个最大的缺点,就是只能把项目打包成一个大的js,当项目开发到后期会很大,网上找了很久也没找到合理的jspm打包方式。 所以开始调研可以打包angular项目成多个文件的工具.

调研过程

过程中看了些 vue,react配合webpack按路由功能打包的demo,感觉webpack对于打包成多个文件比较擅长。

结果

第一步 核心模块依赖加载

#core.module.js //核心模块

import 'angular-route'; //官方路由依赖
import 'oclazyLoad' //angular异步加载依赖
import CoreRouter from './core.router'
import LoginModule from '../states/login/login.module' //登入模块定义js

export default angular.module('xxx.bg',[
  'ngRoute', 
  'oc.lazyLoad', 
  LoginModule.name, 
])
.config(CoreRouter) //主要是路由配置文件

第二步 路由配置

#core.router.js //这里不是重点,只是一般的配置

import LoginRouter from '../states/login/login.route' //登入路由定义js 

function CoreRouter($routeProvider) {
  $routeProvider
    .when('/login',LoginRouter)
    .otherwise({redirectTo: '/login'});
}

CoreRouter.$inject = ['$routeProvider'];

export default CoreRouter;

第三步 异步请求路由控制器的js

#login.route.js //最重要的操作都在这里

import LoginTpl from './login.tpl.html' //模板 用webpack的raw-loader加载成文本字符串,具体配置看

let LoginRoute = {
  template  :  LoginTpl,
  controller : 'LoginCtrl', //这里只是写了一个字符串
  resolve: {
    load: ['$q','$ocLazyLoad',function ($q,$ocLazyLoad) {
      return $q((resolve) => {
        //下面这一行写法是webpack在需要的时候才下载依赖的模块,[具体看这里][2]
        require.ensure([], () => {
          //这里只是依赖了一个控制器文件,但是这个文件里面你可以import很多其他的依赖
          let module = require('./login.controller'); 
          
          //加载模块名为xxx.bg.login的模块,具体是什么作用没弄明白,请高手解答
          $ocLazyLoad.load({name: 'xxx.bg.login'}); 
          
          //promise 的成功回调,不返回出去参数也没关系,因为在login.contorller.js里面已经注册了LoginCtrl
          resolve(module.controller); 
        });
      });
    }]
  }
};
export default LoginRoute;

其他文件

#login.module.js

export default angular.module('xxx.bg.login',[]);
#login.controller.js //这就是第三步异步请求的js webpack会把这个js和它依赖到的js打包成一个js

import './login.module'
import '../../../lib/echarts/echarts.min' //随便引入了一个百度图表 比较大的js 超过100K webpack会报警,需要在配置中设置

export default angular.module('xxx.bg.login')
  //注册控制器
  .controller('LoginCtrl',['$rootScope',
    function($rootScope){
      $rootScope.theme = {name:'login-page'};
  }])
#webpack.config.js
var path = require('path')
module.exports = {
 entry: './source/com.xxx.bg/main.js', //项目入口文件
 output: {
  path: './dist/public',
  publicPath: './public/',
  filename: 'bundle.js'
 },
 resolve: {
  extensions: ['', '.js'],
  alias: {
   'src': path.resolve(__dirname, '../source')
  }
 },
 resolveLoader: {
  root: path.join(__dirname, 'node_modules'),
 },
 module: {
  loaders: [
   {
    test: /\.js$/,
    exclude: /node_modules|lib/,
    loader: 'babel-loader?stage=0',
    query: {compact: false}
   },
   {
    test: /\.html$/,
    exclude: /node_modules/,
    loader: 'raw-loader?stage=0'
   }
  ]
 }
};

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 写类方式之九
Jul 05 Javascript
DOM 中的事件处理介绍
Jan 18 Javascript
方便实用的jQuery checkbox复选框全选功能简单实例
Oct 09 Javascript
js保留小数点后几位的写法
Jan 03 Javascript
JavaScript获取表单enctype属性的方法
Apr 02 Javascript
JavaScript DOM操作表格及样式
Apr 13 Javascript
js获取及修改网页背景色和字体色的方法
Dec 29 Javascript
分享几种比较简单实用的JavaScript tabel切换
Dec 31 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
Mar 17 Javascript
AngularJS过滤器filter用法总结
Dec 13 Javascript
详解React-Router中Url参数改变页面不刷新的解决办法
May 08 Javascript
vue+element项目中过滤输入框特殊字符小结
Aug 07 Javascript
详解如何使用webpack+es6开发angular1.x
Aug 16 #Javascript
微信小程序自定义组件
Aug 16 #Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
Aug 16 #Javascript
微信小程序多列选择器range-key使用详解
Mar 30 #Javascript
jQuery取得元素标签名称小结(附代码)
Aug 16 #jQuery
微信小程序tabBar底部导航中文注解api详解
Aug 16 #Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
Aug 16 #Javascript
You might like
php+AJAX传送中文会导致乱码的问题的解决方法
2008/09/08 PHP
PHP同时连接多个mysql数据库示例代码
2014/03/17 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
2019/03/30 PHP
js 图片轮播(5张图片)
2008/12/30 Javascript
javascript 可以拖动的DIV(二)
2009/06/26 Javascript
Javascript中产生固定结果的函数优化技巧
2013/01/16 Javascript
AngularJS入门教程之Hello World!
2014/12/06 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
JavaScript数据类型学习笔记
2016/01/25 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
详细讲解JavaScript中的this绑定
2016/10/10 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
ajax异步请求详解
2017/01/06 Javascript
jQuery序列化后的表单值转换成Json
2017/06/16 jQuery
vue2.0 datepicker使用方法
2018/02/04 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
JavaScript中如何对多维数组(矩阵)去重的实现
2019/12/04 Javascript
JS实现图片切换特效
2019/12/23 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
2020/08/14 Javascript
Python 函数基础知识汇总
2018/03/09 Python
Python中Proxypool库的安装与配置
2018/10/19 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
python的sys.path模块路径添加方式
2020/03/09 Python
HTML5 Web Workers之网站也能多线程的实现
2013/04/24 HTML / CSS
印度尼西亚综合购物网站:Lazada印尼
2016/09/07 全球购物
英国创新设计文具、卡片和礼品包装网站:Paperchase
2018/07/14 全球购物
俄罗斯香水和化妆品网上商店:NOTINO.ru
2019/12/17 全球购物
Arti-shopping中文官网:大型海外商品一站式直邮平台
2020/03/23 全球购物
P/Invoke是什么
2015/07/31 面试题
销售人员自我评价怎么写
2013/09/19 职场文书
家长学校工作方案
2014/05/07 职场文书
2014年化妆品销售工作总结
2014/12/01 职场文书
物业项目经理岗位职责
2015/04/01 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书
python使用pymysql模块操作MySQL
2021/06/16 Python