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 input文本框禁用右键和复制粘贴功能的代码
Apr 15 Javascript
JavaScript之IE的fireEvent方法详细解析
Nov 20 Javascript
js 处理数组重复元素示例代码
Dec 27 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
Sep 21 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
Jun 11 jQuery
Vue 中批量下载文件并打包的示例代码
Nov 20 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
Mar 05 Javascript
Vue.js实现数据响应的方法
Aug 13 Javascript
javascript实现考勤日历功能
Nov 29 Javascript
React生命周期原理与用法踩坑笔记
Apr 28 Javascript
uniapp实现横向滚动选择日期
Oct 21 Javascript
vue实现锚点定位功能
Jun 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
php使用sql数据库 获取字段问题介绍
2013/08/12 PHP
php简单实现MVC
2015/02/05 PHP
PHP编写RESTful接口
2016/02/23 PHP
PHP验证类的封装与使用方法详解
2019/01/10 PHP
PHP延迟静态绑定使用方法实例解析
2020/09/05 PHP
指定js可访问其它域名的cookie的方法
2007/09/18 Javascript
jquery 多级下拉菜单核心代码
2010/05/21 Javascript
游览器中javascript的执行过程(图文)
2012/05/20 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
javascript实现动态表头及表列的展现方法
2015/07/14 Javascript
jQuery对象的链式操作用法分析
2016/05/10 Javascript
js实现页面刷新滚动条位置不变
2016/11/27 Javascript
基于JavaScript实现轮播图原理及示例
2020/04/10 Javascript
vue实现长图垂直居上 vue实现短图垂直居中
2017/10/18 Javascript
实例学习JavaScript读取和写入cookie
2018/01/29 Javascript
详解小程序input框失焦事件在提交事件前的处理
2019/05/05 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
2019/09/24 Javascript
详解微信小程序中var、let、const用法与区别
2020/01/11 Javascript
基于better-scroll 实现歌词联动功能的代码
2020/05/07 Javascript
Python中用startswith()函数判断字符串开头的教程
2015/04/07 Python
python连接MySQL数据库实例分析
2015/05/12 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
python调用c++传递数组的实例
2019/02/13 Python
python创建属于自己的单词词库 便于背单词
2019/07/30 Python
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
唤醒头发毛囊的秘密武器:Grow Gorgeous
2016/08/28 全球购物
SISLEY希思黎官方旗舰店:享誉全球的奢华植物美容品牌
2018/04/25 全球购物
Tirendo比利时:在线购买轮胎
2018/10/22 全球购物
Ray-Ban雷朋太阳眼镜英国官网:Ray-Ban UK
2019/11/23 全球购物
UNIX命令速查表
2012/03/10 面试题
店长岗位的工作内容
2013/11/12 职场文书
检查接待方案
2014/02/27 职场文书
镇党委书记群众路线整改措施思想汇报
2014/10/13 职场文书
2015年七年级班主任工作总结
2015/05/21 职场文书