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 相关文章推荐
js实现简单模态窗口,背景灰显
Nov 14 Javascript
JS input 数字验证代码
Jul 30 Javascript
JavaScript 学习笔记 Black.Caffeine 09.11.28
Nov 30 Javascript
js实现按钮加背景图片常用方法
Nov 01 Javascript
png在IE6 下无法透明的解决方法汇总
May 21 Javascript
jQuery控制div实现随滚动条滚动效果
Jun 07 Javascript
vue源码学习之Object.defineProperty 对数组监听
May 30 Javascript
使用express来代理服务的方法
Jun 21 Javascript
js实现网页版贪吃蛇游戏
Feb 22 Javascript
Element Notification通知的实现示例
Jul 27 Javascript
JavaScript位置参数实现原理及过程解析
Sep 14 Javascript
详解Vue 的异常处理机制
Nov 30 Vue.js
详解如何使用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
从一个不错的留言本弄的mysql数据库操作类
2007/09/02 PHP
很好用的PHP数据库类
2009/05/27 PHP
PHP Stream_*系列函数
2010/08/01 PHP
PHP中的正则表达式函数介绍
2012/02/27 PHP
成为好程序员必须避免的5个坏习惯
2014/07/04 PHP
使用TextRange获取输入框中光标的位
2006/10/14 Javascript
Some tips of wmi scripting in jscript (1)
2007/04/03 Javascript
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
异步动态加载js与css文件的js代码
2013/09/15 Javascript
JS简单实现文件上传实例代码(无需插件)
2013/11/15 Javascript
jQuery实现数字加减效果汇总
2014/12/16 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
jQuery实现Select左右复制移动内容
2016/08/05 Javascript
jQuery实现文字自动横移
2017/01/08 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
微信小程序 定位到当前城市实现实例代码
2017/02/23 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
nuxt.js 缓存实践
2018/06/25 Javascript
js实现的格式化数字和金额功能简单示例
2019/07/30 Javascript
12步教你理解Python装饰器
2016/02/25 Python
Django框架HttpRequest对象用法实例分析
2019/11/01 Python
CSS3弹性布局内容对齐(justify-content)属性使用详解
2017/07/31 HTML / CSS
Original Penguin英国官方网站:美国著名休闲时装品牌
2016/10/30 全球购物
英国Boots旗下太阳镜网站:Boots Designer Sunglasses
2018/07/07 全球购物
美国隐形眼镜零售商:LensPure
2019/03/10 全球购物
请说出你所知道的线程同步的方法
2013/04/19 面试题
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
大二学生学习个人自我评价
2014/01/19 职场文书
幼师小班个人总结
2015/02/12 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫
python处理json数据文件
2022/04/11 Python
MySQL一劳永逸永久支持输入中文的方法实例
2022/08/05 MySQL