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 相关文章推荐
Jquery 点击按钮显示和隐藏层的代码
Jul 25 Javascript
跨域请求之jQuery的ajax jsonp的使用解惑
Oct 09 Javascript
JS中处理与当前时间间隔的函数代码
May 23 Javascript
JavaScript 布尔操作符解析  && || !
Aug 10 Javascript
JavaScript事件类型中焦点、鼠标和滚轮事件详解
Jan 25 Javascript
JavaScript的设计模式经典之代理模式
Feb 24 Javascript
深入理解JS函数的参数(arguments)的使用
May 28 Javascript
input框中的name和id的区别
Nov 16 Javascript
微信小程序动态添加分享数据
Jun 14 Javascript
微信小程序三级联动选择器使用方法
May 19 Javascript
史上最为详细的javascript继承(推荐)
May 18 Javascript
Vue项目打包部署到apache服务器的方法步骤
Feb 01 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
php中stdClass的用法分析
2015/02/27 PHP
jquery对象和DOM对象的区别介绍
2013/08/09 Javascript
JavaScript中变量声明有var和没var的区别示例介绍
2014/09/15 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
JavaScript分析、压缩工具JavaScript Analyser
2014/12/31 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
AngularJS之依赖注入模拟实现
2016/08/19 Javascript
第一次接触Bootstrap框架
2016/10/24 Javascript
JQuery判断正整数整理小结
2017/08/21 jQuery
nodejs 使用http进行post或get请求的实例(携带cookie)
2019/01/03 NodeJs
JS实现盒子拖拽效果
2020/02/06 Javascript
vue实现图片上传到后台
2020/06/29 Javascript
[24:42]VP vs TNC Supermajor小组赛B组 BO3 第三场 6.2
2018/06/03 DOTA
仅用500行Python代码实现一个英文解析器的教程
2015/04/02 Python
Python中文竖排显示的方法
2015/07/28 Python
Python上传package到Pypi(代码简单)
2016/02/06 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
2016/09/21 Python
numpy中索引和切片详解
2017/12/15 Python
Python实现两款计算器功能示例
2017/12/19 Python
Python网络编程之TCP套接字简单用法示例
2018/04/09 Python
详解python算法之冒泡排序
2019/03/05 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
介绍一下Java中标识符的命名规则
2014/02/03 面试题
通信工程专业女生个人求职信
2013/09/21 职场文书
网游商务专员求职信
2013/10/15 职场文书
小学毕业演讲稿
2014/04/25 职场文书
初中英语教师个人工作总结
2015/02/09 职场文书
简历中自我评价范文
2015/03/11 职场文书
2015年国庆晚会主持词
2015/07/01 职场文书
2015年中秋放假通知范文
2015/08/18 职场文书
Mysql Online DDL的使用详解
2021/05/20 MySQL