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 模拟点击广告
Jan 02 Javascript
JavaScript CSS修改学习第六章 拖拽
Feb 19 Javascript
利用div+jquery自定义滚动条样式的2种方法
Jul 18 Javascript
jquery validation验证身份证号,护照,电话号码,email(实例代码)
Nov 06 Javascript
浅谈JavaScript中运算符的优先级
Jul 07 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
May 11 Javascript
AngularJS表达式讲解及示例代码
Aug 16 Javascript
Bootstrap3 Grid system原理及应用详解
Sep 30 Javascript
node.js入门教程之querystring模块的使用方法
Feb 27 Javascript
JS基于面向对象实现的多个倒计时器功能示例
Feb 28 Javascript
小程序click-scroll组件设计
Jun 18 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
Nov 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
《逃离塔科夫》——“萌新劝退,老手自嗨”的硬核FPS游戏
2020/04/03 其他游戏
PHP中使用BigMap实例
2015/03/30 PHP
54个提高PHP程序运行效率的方法
2015/07/19 PHP
PHP哈希表实现算法原理解析
2020/12/11 PHP
Gird事件机制初级读本
2007/03/10 Javascript
文本框的字数限制功能jquery插件
2009/11/24 Javascript
JS中confirm,alert,prompt函数使用区别分析
2010/04/01 Javascript
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
javascript实现日历控件(年月日关闭按钮)
2012/12/12 Javascript
jQuery fadeTo方法调整图片的透明度使用介绍
2013/05/06 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
jQuery实现自定义事件的方法
2015/04/17 Javascript
探讨JavaScript标签位置的存放与功能有无关系
2016/01/15 Javascript
jQuery插件支持同一页面被多次调用
2016/02/14 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
jquery实现焦点轮播效果
2017/02/23 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
微信小程序中form 表单提交和取值实例详解
2017/04/20 Javascript
纯js实现画一棵树的示例
2017/09/05 Javascript
使用js实现将后台传入的json数据放在前台显示
2018/08/06 Javascript
如何使用CSS3+JQuery实现悬浮墙式菜单
2019/06/18 jQuery
利用layer实现表单完美验证的方法
2019/09/26 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
详解Python3 基本数据类型
2019/04/19 Python
飞利浦法国官网:Philips法国
2019/07/10 全球购物
标记环网Toke Ring IEEE802.5
2014/05/26 面试题
大学生优秀的自我评价分享
2013/10/22 职场文书
《在家里》教后反思
2014/03/01 职场文书
超市开业庆典策划方案
2014/05/14 职场文书
行政人事主管岗位职责
2015/04/11 职场文书
承诺书范本大全
2015/05/04 职场文书
钢琴师观后感
2015/06/12 职场文书
毕业证明书
2015/06/19 职场文书
女性励志书籍推荐
2019/08/19 职场文书
AngularJS实现多级下拉框
2022/03/25 Javascript
使用scrapy实现增量式爬取方式
2022/06/21 Python