vue.js学习之vue-cli定制脚手架详解
发布时间 - 2026-01-11 02:08:22 点击率:次前言

年初的时候公司的老后台系统实在难以维护和继续在其上开发了,因为这个系统被很多人写过页面,有前端有后端,编写前端代码时都非常随意,加之没有模块化,复用性和可维护性都极低,便下定决定,重新搞一套。
经过一段时间的调研选择了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
)
}
}),
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对的支持。
# vue
# cli脚手架
# vuecli脚手架
# vue.js
# cli
# vue.js的手脚架vue-cli项目搭建的步骤
# 详解如何使用vue-cli脚手架搭建Vue.js项目
# vue.js之vue-cli脚手架的搭建详解
# vue-cli入门之项目结构分析
# Vue学习笔记进阶篇之vue-cli安装及介绍
# 深入理解Vue-cli搭建项目后的目录结构探秘
# 详解vue-cli本地环境API代理设置和解决跨域
# 详解vue-cli快速构建项目以及引入bootstrap、jq
# 使用 vue.js 构建大型单页应用
# 的是
# 多个
# 这篇文章
# 会有
# 有个
# 我觉得
# 第一个
# 上了
# 如有
# 很多人
# 不是很
# 只会
# 人了
# 来做
# 其中一个
# 谢谢大家
# 要了
# 需要注意
# 写过
# 其上
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Android仿QQ列表左滑删除操作
公司门户网站制作流程,华为官网怎么做?
JavaScript如何实现音频处理_Web Audio API如何工作?
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
EditPlus 正则表达式 实战(3)
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
如何快速生成可下载的建站源码工具?
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
JavaScript数据类型有哪些_如何准确判断一个变量的类型
java获取注册ip实例
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
如何在服务器上三步完成建站并提升流量?
北京的网站制作公司有哪些,哪个视频网站最好?
Bootstrap整体框架之JavaScript插件架构
php json中文编码为null的解决办法
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
微信小程序 闭包写法详细介绍
Java遍历集合的三种方式
晋江文学城电脑版官网 晋江文学城网页版直接进入
js实现获取鼠标当前的位置
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
Laravel怎么使用Intervention Image库处理图片上传和缩放
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
如何确保FTP站点访问权限与数据传输安全?
常州企业网站制作公司,全国继续教育网怎么登录?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
如何在IIS中新建站点并配置端口与物理路径?
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
三星网站视频制作教程下载,三星w23网页如何全屏?
焦点电影公司作品,电影焦点结局是什么?
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
如何获取上海专业网站定制建站电话?
如何挑选最适合建站的高性能VPS主机?
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
javascript读取文本节点方法小结
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
iOS验证手机号的正则表达式
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门

