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小数四舍五入多种方法实现
Dec 23 Javascript
jQuery中fadeIn、fadeOut、fadeTo的使用方法(图片显示与隐藏)
May 08 Javascript
JavaScript 上万关键字瞬间匹配实现代码
Jul 07 Javascript
jQuery操作cookie方法实例教程
Nov 25 Javascript
Node.js的项目构建工具Grunt的安装与配置教程
May 12 Javascript
JS实现焦点图轮播效果的方法详解
Dec 19 Javascript
Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解
Sep 25 Javascript
React props和state属性的具体使用方法
Apr 12 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
Jun 07 Javascript
JavaScript引用类型Object常见用法实例分析
Aug 08 Javascript
layer.open 按钮的点击事件关闭方法
Aug 17 Javascript
在layui下对元素进行事件绑定的实例
Sep 06 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
PHP4和PHP5共存于一系统
2006/11/17 PHP
php处理斐波那契数列非递归方法
2012/02/04 PHP
PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用
2012/05/07 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
详解PHP用substr函数截取字符串中的某部分
2016/12/03 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
PHP7 其他修改
2021/03/09 PHP
XP折叠菜单&仿QQ2006菜单
2006/12/16 Javascript
JS解密入门之凭直觉解
2008/06/25 Javascript
window.parent调用父框架时 ie跟火狐不兼容问题
2009/07/30 Javascript
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
2013/06/28 Javascript
常用js字符串判断方法整理
2013/10/18 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
javascript教程之不完整的继承(js原型链)
2014/01/13 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
JavaScript 变量、作用域及内存
2015/04/08 Javascript
javascript中返回顶部按钮的实现
2015/05/05 Javascript
JS高级运动实例分析
2016/12/20 Javascript
基于input动态模糊查询的实现方法
2017/12/12 Javascript
如何获取TypeScript的声明文件.d.ts
2018/05/01 Javascript
如何解决.vue文件url引用文件的问题
2019/01/18 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
微信小程序利用for循环解决内容变更问题
2020/03/05 Javascript
如何手写一个简易的 Vuex
2020/10/10 Javascript
python 获取文件下所有文件或目录os.walk()的实例
2018/04/23 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
python使用pdfminer解析pdf文件的方法示例
2018/12/20 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
python中使用while循环的实例
2019/08/05 Python
python解释器pycharm安装及环境变量配置教程图文详解
2020/02/26 Python
介绍一下Transact-SQL中SPACE函数的用法
2015/09/01 面试题
房屋授权无偿使用证明
2014/11/29 职场文书
小学生优秀评语
2014/12/29 职场文书
小学英语教学反思范文
2016/02/15 职场文书
Android开发 使用文件储存的方式保存QQ密码
2022/04/24 Java/Android