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 相关文章推荐
js textarea自动增高并隐藏滚动条
Dec 16 Javascript
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
Oct 31 Javascript
浅谈JavaScript超时调用和间歇调用
Aug 30 Javascript
理解AngularJs指令
Dec 10 Javascript
老生常谈onBlur事件与onfocus事件(js)
Jul 09 Javascript
JavaScript 过滤关键字
Mar 20 Javascript
webpack打包单页面如何引用的js
Jun 07 Javascript
Angular2关于@angular/cli默认端口号配置的问题
Jul 15 Javascript
javascript  数组排序与对象排序的实例
Jul 17 Javascript
element中的$confirm的使用
Apr 26 Javascript
Vue + element 实现多选框组并保存已选id集合的示例代码
Jun 03 Javascript
聊聊vue 中的v-on参数问题
Jan 29 Vue.js
如何通过非数字与字符的方式实现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
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
2014/01/19 PHP
phplot生成图片类用法详解
2015/01/06 PHP
PHP编写RESTful接口的方法
2016/02/21 PHP
php实现微信原生支付(扫码支付)功能
2018/05/30 PHP
Javascript中的数学函数
2007/04/04 Javascript
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
Query中click(),bind(),live(),delegate()的区别
2013/11/19 Javascript
js post提交调用方法
2014/02/12 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
JavaScript中的getTimezoneOffset()方法使用详解
2015/06/10 Javascript
jquery专业的导航菜单特效代码分享
2015/08/29 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
javascript 中的 delete及delete运算符
2015/11/15 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
2015/12/11 Javascript
jQuery EasyUI提交表单验证
2016/07/19 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
JS实现队列的先进先出功能示例
2017/05/10 Javascript
Javascript刷新页面的实例
2017/09/23 Javascript
JS实现图片切换效果
2018/11/17 Javascript
最全vue的vue-amap使用高德地图插件画多边形范围的示例代码
2020/07/17 Javascript
Python学习入门之区块链详解
2017/07/25 Python
Python网络编程详解
2017/10/31 Python
Python切片索引用法示例
2018/05/15 Python
python使用多线程+socket实现端口扫描
2020/05/28 Python
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
用HTML5实现手机摇一摇的功能的教程
2012/10/30 HTML / CSS
健康监测猫砂:Pretty Litter
2017/05/25 全球购物
送货司机岗位职责
2013/12/11 职场文书
消防应急演练方案
2014/02/12 职场文书
篮球兴趣小组活动总结
2014/07/07 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
介绍信如何写
2015/01/31 职场文书
2015年银行柜员工作总结报告
2015/04/01 职场文书
公司车辆管理制度
2015/08/04 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript