vue.js学习之vue-cli定制脚手架详解


Posted in Javascript onJuly 02, 2017

前言

年初的时候公司的老后台系统实在难以维护和继续在其上开发了,因为这个系统被很多人写过页面,有前端有后端,编写前端代码时都非常随意,加之没有模块化,复用性和可维护性都极低,便下定决定,重新搞一套。

经过一段时间的调研选择了vue全家桶+elementUI来开发后台系统,让交互体验更好,让开发体验更好,让生产效率提高。

从零搭建其实考虑的事情还挺多的,比如:

  • 如何管理代码仓库
  • 开发环境,测试环境搭建
  • 如何接入公司的打包上线流程
  • 如何目录划分
  • 如何划分模块
  • 登录和权限如何做

这篇文章来记录下和脚手架相关的改造,首先其实就是上了vue-cli来做,可是呢?由于预计项目会有很多页面,这些页面其实是分模块的,不同模块的页面之前其实关系不大。所以我觉得一个用户其实大部分时候只会用到其中一个模块的页面,如果把所有页面做成一个单页应用很多资源加载就不是很必要了,所以第一个改造就是:做成多入口打包,也就是做成多个单页应用,每个模块一个入口。

/build/utils

exports.getEntries = function (globPath) { 
 var entries = {}
 glob.sync(globPath).forEach(function (entry) {
 var basename = path.basename(entry, path.extname(entry))
 entries[basename] = entry
 })
 return entries
}

/build/webpack.base.conf

module.exports = { 
 entry: utils.getEntries('./src/modules/*/*.js'),

/build/webpack.dev.conf

/build/weback.prod.conf

var modules = utils.getEntries('./src/modules/*/*.html') 
Object.keys(modules).forEach(function (moduleName) { 
 var config = {
 filename: moduleName + '/index.html',
 template: modules[moduleName],
 inject: true,
 excludeChunks: Object.keys(modules).filter(function (name) {
  return name != moduleName
 })
 }
 module.exports.plugins.push(new HtmlWebpackPlugin(config))
})

这样就完成了多页面的入口配置,其核心就是两点:1. 入口配置成数组。2. plugins里面添加多个HtmlWebpackPlugin分别对应每一个页面,完成js打包后路径的自动注入功能。

这里还有个地方需要注意,就是抽取公用的js和css代码出来,这里做了一下改造,就是echarts指定提取出来,而不是按引用次数那种自动提取, 这里还踩了个坑,详细见注释。

在webpack.prod.conf的plugins里面加入:

entry: { 
 vendor: ['vue', 'vue-router', 'vuex', 'element-ui'],
 echarts: ['vue-echarts']
 },

// 这个地方天坑啊~~~死人了。。。:(
 // vendor是echarts的父模块,顺序不能反:https://github.com/webpack/webpack/issues/1943
 // 包括声明CommonsChunkPlugin的顺序也是有关系的,不是随意的,后声明的是顶级模块,先声明的是依赖顶级模块的模块
 // HtmlWebpackPlugin注入模块链接的时候的顺序也是由此保证的
 new webpack.optimize.CommonsChunkPlugin({
  names: ['echarts', 'vendor'],
  minChunks: function (module, count) { // 抽取公用vendor.css
  // console.log(module.resource)
  return (
   module.resource &&
   /\.css$/.test(module.resource) &&
   module.resource.indexOf(
   path.join(__dirname, '../node_modules')
   ) === 0
  )
  } 
 }),

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
你真的了解JavaScript吗?
Feb 24 Javascript
IE JS编程需注意的内存释放问题
Jun 23 Javascript
动态加载外部javascript文件的函数代码分享
Jul 28 Javascript
不使用浏览器运行javascript代码的方法
Jul 24 Javascript
javascript每日必学之条件分支
Feb 17 Javascript
js中最容易被忽视的事件问题大总结
May 15 Javascript
ES6实现的遍历目录函数示例
Apr 07 Javascript
最常用的jQuery表单验证(简单)
May 23 jQuery
ActiveX控件的使用-js实现打印超市小票功能代码详解
Nov 22 Javascript
浅析Node.js非对称加密方法
Jan 29 Javascript
layui 富文本赋值,取值,取纯文本值的实例
Sep 18 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
Aug 07 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
Jul 02 #Javascript
关于使用axios的一些心得技巧分享
Jul 02 #Javascript
React服务端渲染(总结)
Jul 01 #Javascript
Express + Node.js实现登录拦截器的实例代码
Jul 01 #Javascript
详解node-ccap模块生成captcha验证码
Jul 01 #Javascript
vue元素实现动画过渡效果
Jul 01 #Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
Jun 30 #Javascript
You might like
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
2010/12/29 PHP
PHP中array_merge和array相加的区别分析
2013/06/17 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
Javascript实现真实字符串剩余字数提示的实例代码
2013/10/22 Javascript
关于JavaScript对象的动态选择及遍历对象
2014/03/10 Javascript
JavaScript获取网页中第一个链接ID的方法
2015/04/03 Javascript
JS获取数组最大值、最小值及长度的方法
2015/11/24 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
2016/05/05 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
浅谈Angular4实现热加载开发旅程
2017/09/08 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
2017/12/18 Javascript
JavaScript使用math.js进行精确计算操作示例
2018/06/19 Javascript
小程序云开发实战小结
2018/10/25 Javascript
深入探索VueJS Scoped CSS 实现原理
2019/09/23 Javascript
vue移动端的左右滑动事件详解
2020/06/17 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
Nest.js散列与加密实例详解
2021/02/24 Javascript
python开发简易版在线音乐播放器
2017/03/03 Python
python3中zip()函数使用详解
2018/06/29 Python
python 2.7.13 安装配置方法图文教程
2018/09/18 Python
python使用thrift教程的方法示例
2019/03/21 Python
pip 安装库比较慢的解决方法(国内镜像)
2019/10/06 Python
python orm 框架中sqlalchemy用法实例详解
2020/02/02 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
2020/02/22 Python
Python如何读写字节数据
2020/08/05 Python
CSS3解析抖音LOGO制作的方法步骤
2019/04/11 HTML / CSS
Under Armour安德玛荷兰官网:美国高端运动科技品牌
2019/07/10 全球购物
几道PHP面试题
2013/04/14 面试题
护士个人简历自荐信
2013/10/18 职场文书
学生思想表现的评语
2014/01/30 职场文书
委托书样本
2014/04/02 职场文书
超市周年庆活动方案
2014/08/16 职场文书
Linux系统下安装PHP7.3版本
2021/06/26 PHP
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
2021/12/06 MySQL
Redis特殊数据类型HyperLogLog基数统计算法讲解
2022/06/01 Redis