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 相关文章推荐
经验几则 推荐
Sep 05 Javascript
用jquery来定位
Feb 20 Javascript
javascript 密码框防止用户粘贴和复制的实现代码
Feb 17 Javascript
认识Knockout及如何使用Knockout绑定上下文
Dec 25 Javascript
JavaScript制作简单分页插件
Sep 11 Javascript
javascript实现多张图片左右无缝滚动效果
Mar 22 Javascript
Less 安装及基本用法
May 05 Javascript
Vue中的scoped实现原理及穿透方法
May 15 Javascript
微信小程序实现指定显示行数多余文字去掉用省略号代替
Jul 25 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
Dec 22 jQuery
Jquery实现获取子元素的方法分析
Aug 24 jQuery
JS数组方法shift()、unshift()用法实例分析
Jan 18 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
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
php函数指定默认值方法的小例子
2013/12/04 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
javascript 装载iframe子页面,自适应高度
2009/03/20 Javascript
Jquery获取元素的父容器对象示例代码
2014/02/10 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
详谈JavaScript的闭包及应用
2017/01/17 Javascript
js获取地址栏中传递的参数(两种方法)
2017/02/08 Javascript
vue使用vue-cli快速创建工程
2017/07/28 Javascript
vue.js实现只弹一次弹框
2018/01/29 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
Koa 使用小技巧(小结)
2018/10/22 Javascript
Vue表情输入组件 微信face表情组件
2019/02/11 Javascript
vue生命周期的探索
2019/04/03 Javascript
vue+ts下对axios的封装实现
2020/02/18 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python正则表达式常用函数总结
2017/06/24 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
2017/12/19 Python
使用pandas的DataFrame的plot方法绘制图像的实例
2018/05/24 Python
关于Python的一些学习总结
2018/05/25 Python
Python快速查找list中相同部分的方法
2018/06/27 Python
python实现图片彩色转化为素描
2019/01/15 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
Python各种扩展名区别点整理
2020/02/27 Python
python文件排序的方法总结
2020/09/13 Python
伦敦剧院门票:From The Box Office
2018/06/30 全球购物
三项教育活动实施方案
2014/03/30 职场文书
企业授权委托书范本
2014/04/02 职场文书
党员领导干部民主生活会批评与自我批评发言
2014/09/28 职场文书
ORM模型框架操作mysql数据库的方法
2021/07/25 MySQL
Mysql中mvcc各场景理解应用
2022/08/05 MySQL