热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基於Vuecli的一套代碼支撐多個項目的解決方案

基於Vue-cli的一套代碼支撐多個項目的解決方案運用場景在toB端營業中,一樣的產物,客戶多多少少會請求一些定製化。從皮膚,圖片,到一些小的功用的差別。前端老是沖在最前面須要改的
基於Vue-cli的一套代碼支撐多個項目的解決方案

運用場景

在toB端營業中,一樣的產物,客戶多多少少會請求一些定製化。從皮膚,圖片,到一些小的功用的差別。
前端老是沖在最前面須要改的。假如修改不大的話,拉個分支有增加了保護的本錢,分支拉多了,假如骨幹有一個題目相當於copy了n份,誰人味道幾乎不要太酸爽。那末,是不是能夠一套代碼支撐多個項目呢?

前段時間,接了一個需求,手藝選型是VUE,用vue-cli搭建的。一套代碼須要支撐10幾家客戶,每家的皮膚,功用都有一些小的差別,主體流程大抵是一樣的。在這個場景下研討了一下解決方案。

思緒

整體的思緒模塊化,然後在編譯的時刻依據輸入敕令直接組裝差別的模塊,打包出我們須要的頁面。
這個處所就有兩個題目:

1.怎樣離別頁面,掌握組件的顆粒度?

2.怎樣差別化編譯?

項目構造

一樣一個頁面,有雷同的部份,也有一些不一樣的部份。vue自身的組件化頭腦很輕易讓我們想到把頁面拆分成組件,然後把大眾的提取出來,差別化的離別處置懲罰。

項目整體構造

《基於Vue-cli的一套代碼支撐多個項目的解決方案》

build

build構造中主如果webpack的一些劇本設置

config

config文件主如果項目相干設置,我們經常運用的就是當端口爭執時設置監聽端口,打包輸出途徑及定名等

src

源碼文件。

assets:靜態資本,平常放圖片,款式等

less:款式文件,這裏分主題處置懲罰了

pages:頁面文件

router:路由

util:東西類

components

《基於Vue-cli的一套代碼支撐多個項目的解決方案》

文件夾中是各個項目的自有的組件。components目錄下的是大眾的組件

static

靜態資本,不會被webpack編譯。平常放一下外部援用文件。

webpack打包設置

怎樣差別化編譯?

1.cross-env運用環境變量。在編譯階段,依據編譯傳入的變量差別,編譯差別的組件。
起首,要改的是package.json的文件

"scripts": {
"dev:gx": "cross-env BRANCH_ENV=gx node build/dev-server.js",
"build:gx": "cross-env BRANCH_ENV=gx node build/build.js"
},

這個時刻我們編譯的時刻輸入對應的敕令 就能夠傳入響應的環境變量。
eg:npm run dev:gx 會傳入BRANCH_ENV=gx。

2.把config/prod.env.js中注入這個環境變量

module.exports = {
NODE_ENV: '"production"',
API_PATH:'""',
BRANCH_ENV: JSON.stringify(process.env.BRANCH_ENV) || '"base"',
ignoreCsrfToken:'"false"'
}

3.webpack.base.conf.js

resolve: {
extensions: ['', '.js', '.vue', '.json'],
fallback: [path.join(__dirname, '../node_modules')],
alias: {
'vue$': 'vue/dist/vue.common.js',
'src': path.resolve(__dirname, '../src'),
'assets': path.resolve(__dirname, '../src/assets/images/'+process.env.BRANCH_ENV),
'components': path.resolve(__dirname, '../src/components'),
'componentsDif': path.resolve(__dirname, '../src/components/'+process.env.BRANCH_ENV),
}
},

能夠看的出,我們把編譯敕令注入的環境變量在引入別號的時刻用上了。比如說,假定我輸入的編譯敕令是

npm run build:gx

這個時刻

'assets': path.resolve(__dirname, '../src/assets/images/'+process.env.BRANCH_ENV)
//等同於
'assets': path.resolve(__dirname, '../src/assets/images/gx')

頁面援用

1.圖片援用


//依據編譯敕令。圖片援用的是src/assets/images/gx/arrow.png
background: url(~assets/btn_1.png) no-repeat;

ps:用別號的時刻記得要加上~號

2.組件援用

//大眾組件
import ruleTitle from 'components/RuleTitle'
//差別化組件
import ruleContent from 'componentsDif/RuleContent'

總結

總而言之,中心頭腦就是跟進編譯敕令傳入環境變量,應用環境變量和別號的設置來差別化打包。比較難的是怎樣掌握組件的顆粒度,怎樣拆分組件,這個須要跟據需求的差別來現實定製。


推荐阅读
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
author-avatar
real存在尹
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有