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 相关文章推荐
jQuery 一个图片切换的插件
Oct 09 Javascript
js confirm()方法的使用方法实例
Jul 13 Javascript
包含中国城市的javascript对象实例
Aug 03 Javascript
jQuery解析XML 详解及方法总结
Sep 28 Javascript
基于JavaScript实现微信抢红包功能
Jul 20 Javascript
js禁止Backspace键使浏览器后退的实现方法
Sep 01 Javascript
浅谈es6 javascript的map数据结构
Dec 14 Javascript
结合Vue控制字符和字节的显示个数的示例
May 17 Javascript
动态内存分配导致影响Javascript性能的问题
Dec 18 Javascript
Vue 设置axios请求格式为form-data的操作步骤
Oct 29 Javascript
JavaScript冒泡算法原理与实现方法深入理解
Jun 04 Javascript
JavaScript中的执行环境和作用域链
Sep 04 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
德生9700DX电路分析
2021/03/02 无线电
一个php作的文本留言本的例子(三)
2006/10/09 PHP
php简单实现快速排序的方法
2015/04/04 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
关于javascript function对象那些迷惑分析
2011/10/24 Javascript
浅析jQuery中常用的元素查找方法总结
2013/07/04 Javascript
JS常见问题整理(持续更新)
2013/08/06 Javascript
禁止页面刷新让F5快捷键及右键都无效
2014/01/22 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
2015/08/17 Javascript
解析Node.js基于模块和包的代码部署方式
2016/02/16 Javascript
Vue.js每天必学之Class与样式绑定
2016/09/05 Javascript
JS button按钮实现submit按钮提交效果
2016/11/01 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
详解jQuery中ajax.load()方法
2017/01/25 Javascript
详解webpack进阶之插件篇
2017/07/06 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
jQuery鼠标滑过横向时间轴样式(代码详解)
2019/11/01 jQuery
Python通过90行代码搭建一个音乐搜索工具
2015/07/29 Python
详解python脚本自动生成需要文件实例代码
2017/02/04 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
2017/06/30 Python
python如何在循环引用中管理内存
2018/03/20 Python
python 请求服务器的实现代码(http请求和https请求)
2018/05/25 Python
python 字典 按key值大小 倒序取值的实例
2018/07/06 Python
python实现名片管理系统
2018/11/29 Python
详解python破解zip文件密码的方法
2020/01/13 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
2020/02/07 Python
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
美国在线纱线商店:Darn Good Yarn
2019/03/20 全球购物
数学系个人求职信范文
2014/01/30 职场文书
优秀士兵先进事迹
2014/02/06 职场文书
护理实习生带教计划
2015/01/16 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
学籍证明模板
2015/06/18 职场文书
如何利用golang运用mysql数据库
2022/03/13 Golang