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的写法基础分析
Jan 17 Javascript
自己动手制作jquery插件之自动添加删除行的实现
Oct 13 Javascript
Moment.js 不容错过的超棒Javascript日期处理类库
Apr 15 Javascript
Jquery多选框互相内容交换的实例代码
Jul 04 Javascript
JS 实现Table相同行的单元格自动合并示例代码
Aug 27 Javascript
AngularJS内置指令
Feb 04 Javascript
基于JSON数据格式详解
Aug 31 Javascript
JavaScript中发出HTTP请求最常用的方法
Jul 12 Javascript
Node.js 的 GC 机制详解
Jun 03 Javascript
ES6 Promise对象的应用实例分析
Jun 27 Javascript
基于纯JS实现多张图片的懒加载Lazy过程解析
Oct 14 Javascript
JavaScript中10个Reduce常用场景技巧
Jun 21 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之第八天
2006/10/09 PHP
Php header()函数语法及使用代码
2013/11/04 PHP
discuz目录文件资料汇总
2014/12/30 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
基于jquery的textarea发布框限制文字字数输入(添加中文识别)
2012/02/16 Javascript
node.js中的http.response.getHeader方法使用说明
2014/12/14 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
WEB开发之注册页面验证码倒计时代码的实现
2016/12/15 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
微信小程序 图片宽度自适应的实现
2017/04/06 Javascript
Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)
2017/07/03 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
自己编程中遇到的Python错误和解决方法汇总整理
2015/06/03 Python
Python使用爬虫猜密码
2016/02/19 Python
Python无损音乐搜索引擎实现代码
2018/02/02 Python
简单了解python单例模式的几种写法
2019/07/01 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
Python实现括号匹配方法详解
2020/02/10 Python
简单几步用纯CSS3实现3D翻转效果
2019/01/17 HTML / CSS
关于元旦的广播稿
2014/02/16 职场文书
求职信标题怎么写
2014/05/26 职场文书
新学期开学标语
2014/06/30 职场文书
个人求职意向书
2015/05/11 职场文书
新闻通讯稿模板
2015/07/22 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
实习报告范文
2019/07/30 职场文书
2019年亲子运动会口号
2019/10/11 职场文书
Python - 10行代码集2000张美女图
2021/05/23 Python
Python 恐龙跑跑小游戏实现流程
2022/02/15 Python
redis数据结构之压缩列表
2022/03/21 Redis