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封装的不错的选项卡效果代码
Feb 15 Javascript
js 方法实现返回多个数据的代码
Apr 30 Javascript
学习ExtJS TextField常用方法
Oct 07 Javascript
jQuery 源码分析笔记(4) Ready函数
Jun 02 Javascript
jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
Dec 03 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
Jun 17 Javascript
jQuery实现的自定义滚动条实例详解
Sep 20 Javascript
Vue.js tab实现选项卡切换
May 16 Javascript
通过命令行生成vue项目框架的方法
Jul 12 Javascript
node全局变量__dirname与__filename的区别
Jan 14 Javascript
AjaxFileUpload.js实现异步上传文件功能
Apr 19 Javascript
Vue 数据响应式相关总结
Jan 28 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
ajax+php打造进度条代码[readyState各状态说明]
2010/04/12 PHP
PHP详解ASCII码对照表与字符转换
2011/12/05 PHP
php查询mssql出现乱码的解决方法
2014/12/29 PHP
Thinkphp中的curd应用实用要点
2015/01/04 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
JavaScript高级程序设计 阅读笔记(七) ECMAScript中的语句
2012/02/27 Javascript
jquery获取选中的文本和值的方法
2014/07/08 Javascript
JavaScript中实现异步编程模式的4种方法
2014/09/24 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
jQuery实现获取h1-h6标题元素值的方法
2017/03/06 Javascript
H5手机端多文件上传预览插件
2017/04/21 Javascript
微信小程序 自定义消息提示框
2017/08/06 Javascript
nodejs实现简单的gulp打包
2017/12/21 NodeJs
浅谈Vue 性能优化之深挖数组
2018/12/11 Javascript
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
2019/02/02 NodeJs
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
基于python socketserver框架全面解析
2017/09/21 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
python Pillow图像处理方法汇总
2019/10/16 Python
如何关掉pycharm中的python console(图解)
2019/10/31 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
python+appium+yaml移动端自动化测试框架实现详解
2020/11/24 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
python中编写函数并调用的知识点总结
2021/01/13 Python
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
医药销售求职信范文
2014/02/01 职场文书
ktv筹备计划书
2014/05/03 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
办公室规章制度范本
2015/08/04 职场文书
python小程序之飘落的银杏
2021/04/17 Python
python绘制箱型图
2021/04/27 Python
django学习之ajax post传参的2种格式实例
2021/05/14 Python