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 oop开发滑动(slide)菜单控件
Aug 25 Javascript
js复制到剪切板的实例方法
Jun 28 Javascript
15个jquery常用方法、小技巧分享
Jan 13 Javascript
模板视图和AngularJS之间冲突的解决方法
Nov 22 Javascript
jquery 多个radio的click事件实例
Dec 03 Javascript
Node.js中.pfx后缀文件的处理方法
Mar 10 Javascript
bootstrap table实现单击单元格可编辑功能
Mar 28 Javascript
详解Node.js 命令行程序开发教程
Jun 07 Javascript
webpack打包js的方法
Mar 12 Javascript
jQuery轮播图实例详解
Aug 15 jQuery
jQuery序列化form表单数据为JSON对象的实现方法
Sep 20 jQuery
layui 数据表格 根据值(1=业务,2=机构)显示中文名称示例
Oct 26 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
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
Mysql数据库操作类( 1127版,提供源码下载 )
2010/12/02 PHP
PHP字符串中特殊符号的过滤方法介绍
2014/02/18 PHP
php可生成缩略图的文件上传类实例
2014/12/17 PHP
简单谈谈PHP中的Reload操作
2016/12/12 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
javascript获取系统当前时间的方法
2015/11/19 Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
2016/10/09 Javascript
Nodejs实现的操作MongoDB数据库功能完整示例
2019/02/02 NodeJs
微信小程序HTTP接口请求封装的实现
2019/02/21 Javascript
VUE实现Studio管理后台之鼠标拖放改变窗口大小
2020/03/04 Javascript
js cavans实现静态滚动弹幕
2020/05/21 Javascript
Vue+Vant 图片上传加显示的案例
2020/11/03 Javascript
[05:01]3.19DOTA2发布会 我们都是刀塔人
2014/03/25 DOTA
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
[05:23]DOTA2-DPC中国联赛2月1日Recap集锦
2021/03/11 DOTA
Python 模拟购物车的实例讲解
2017/09/11 Python
TensorFlow深度学习之卷积神经网络CNN
2018/03/09 Python
flask-socketio实现WebSocket的方法
2018/07/31 Python
Python中的异常处理try/except/finally/raise用法分析
2019/02/28 Python
python BlockingScheduler定时任务及其他方式的实现
2019/09/19 Python
几款好用的python工具库(小结)
2020/10/20 Python
如何一键升级Python所有包
2020/11/05 Python
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
教师自我鉴定
2013/12/13 职场文书
项目合作意向书范本
2014/04/01 职场文书
大学社团活动总结
2014/04/26 职场文书
大学生考试作弊检讨书1000字
2014/10/14 职场文书
2014年党务工作总结
2014/11/25 职场文书
大学生助学金感谢信
2015/01/21 职场文书
2015年计划生育责任书
2015/05/08 职场文书
golang中实现给gif、png、jpeg图片添加文字水印
2021/04/26 Golang
win10频率超出范围怎么办?win10老显示超出工作频率范围的解决方法
2022/07/07 数码科技