Vue3+Vite打包跨平台(七牛、阿里OSS)上传部署前端项目

1、业务场景

阅读之前,想了解一下各位观众老爷们,你们公司的项目是怎么部署的:

  • 1.本地打包手动上传服务器;
  • 2.本地打包自动上传服务器;
  • 3.代码仓库流水线自动构建;
  • 4.其他…;

我们用的第3种部署方式,仓库代码合并到release之后自动打包部署,不过这个过程很耗费时间,且流水线是要收钱的。有一天,流水线到期了,部门主管打算节约成本,于是就开始让我们自己写一个脚本,用来部署公司项目;

前端静态资源(项目图片、icon、打包css、js)文件放在七牛,域名是阿里的OSS,这种情况和大多数部署方式不同,你们一般直接把所有静态资源放在服务器就行,然后用域名指向服务器ip; 但是对于公司有很多个项目,每个项目都有自己的域名,数据库、redis等的时候,服务器的压力就会很大。如果把服务器的静态资源分出去,且部署在OSS上,对服务器的压力会相对少很多,说干就干;

2、具体实现

npm install ssh2-sftp-client
npm install qiniu

根目录下新建sftp.prod.js文件;

image.png

sftp.prod.js 主要用于将打包后的 index.html 文件上传到阿里OSS;

// sftp.prod.js
const path = require("path");
// eslint-disable-next-line no-undef
const SftpClient = require("ssh2-sftp-client");const sftp = new SftpClient();let options = {port:"",host: "", // sftp地址username:"",password:"",localPath:path.join(__dirname, "dist/index.html")
};const { port, host, username, password} = options;
sftp.connect({host,port,username,password
}).then(async() => {await sftp.put(options.localPath, "/html/index.html");console.log("str===>>>>上传结束");return Promise.resolve();
}).then((res)=>{sftp.end();}).catch((err) => {console.log(err);sftp.end();});

vite.config.js 七牛云配置如下,将css、js等文件上传到指定空间;

// vite.config.js
import { fileURLToPath, URL } from 'node:url'import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import Components from 'unplugin-vue-components/vite';
import cleaner from 'rollup-plugin-cleaner'; //如果使用 rollup 之后 emptyOutDir 会失效,需要使用这个插件清空上次构建结果import qiniu from 'qiniu'
import {qiniuPlugin} from '@puhaha/vite-plugin-upload-oss'
const QINIU_ACCESS_KEY = ""; // 七牛ACCESS_KEY
const QINIU_SECRET_KEY = ""; // 七牛SECRET_KEYconst ossConfig ={sdk: qiniu,accessKey: QINIU_ACCESS_KEY,secretKey: QINIU_SECRET_KEY,bucket: 'static',filePath: './dist',appName:"", publicCdnPath: '', // 七牛域名空间remoteFilePath: '', // 静态资源存放目录uploadTarget:"./dist",openConfirm: false,enabledRefresh: true,excludeHtml:true
};// https://vitejs.dev/config/
export default ({mode}) => {console.log("mode--->", mode);return defineConfig({base: mode=='production' ? `${ossConfig.publicCdnPath}${ossConfig.remoteFilePath}` : '',define: {// 具体环境设置是否开启__VUE_PROD_DEVTOOLS__: true},plugins: [vue(),vueJsx(),qiniuPlugin(ossConfig),],server: {host: true},resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url))}},build: {assetsDir: "",emptyOutDir: true,rollupOptions: {output: {dir: "dist/",format: "iife"},plugins: [cleaner({targets: ['dist/']})]},cssCodeSplit: false,}});
}

3.如何使用

package.json build 后面加上 && node sftp.prod.js, 表示执行npm run build的时候自动执行sftp.prod.js这个文件;

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/607941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端中什么是DOM对象

DOM(文档对象模型)是一种编程接口,用于HTML和XML文档。它提供了一种将文档结构表示为树结构的方式,这使得程序和脚本能够动态地访问和更新文档的内容、结构和样式。 在前端开发中,DOM是非常重要的概念。当浏览器加载网…

认知能力测验,⑥如何破解逻辑判断类测试题?

逻辑思维,是一个比较大的范围,在绝大多数的招聘中,认知能力测评形式多样,难度也较大,其中逻辑判断题型所涉及到的分类为:概念类、条件类、矛盾类、数字类、图形类等知识。比如奥数就是个好东西.....如果经历…

Go语言日志美化库,slog使用指南

Go语言日志美化库,slog使用指南 1.slog2.快速开始3.使用JSON格式4.Text格式化formatter 1.slog slog是Go 实现的一个易于使用的,易扩展、可配置的日志库 slog - github 控制台效果: 安装方式: go get github.com/gookit/slog2…

RAG 最新最全资料整理

最近在做RAG方面的工作。它山之石可以攻玉,做了一些调研,包含了OpenAi,百川,iki.ai为我们提供的一些实现方案。 本文以时间顺序,整理了最近最新最全的和RAG相关的资料。都是满满的干货,包含了RAG评测工具、…

TOPS、MIPS、DMIPS、MFLOPS、吞吐量与推理效率

1.概述 在深度学习对应的神经推理中经常涉及几个重要概念,TOPS、MIPS、DMIPS,MFLOPS,下文对其做对比说明。 2.概念对比 2.1 MIPS Million Instructions Per Second的缩写,每秒处理的百万级的机器语言instructions。这是衡量处…

【单片机】四种烧写方式简介

目录 单片机的四种烧写方式简介 1.使用JTAG接口实现2.SWD接口烧录方式3.ISP烧写方式,用UART实现(常用)4.SWIM单总线下载方式 烧录方式基本介绍烧录方式详述 1、ISP:In System Programming2、IAP:In Applicatin Program…

部分城市公交站点数据,Shp+excel格式数据,2020年,几何类型为点

随着城市的发展和人口的增长,公共交通成为了人们出行的重要方式之一。而公交站点作为公共交通的重要组成部分,其数据信息的获取和分析对于城市规划和管理具有重要意义。 今天来分享一下部分城市公交站点数据: 首先先了解下该数据的基本信息 …

报错解决:RuntimeError: Error building extension ‘bias_act_plugin‘

系统: Ubuntu22.04, nvcc -V:11.8 , torch:2.0.0cu118 一:BUG内容 运行stylegan项目的train.py时遇到报错👇 Setting up PyTorch plugin "bias_act_plugin"... Failed! /home/m…

使用 RaiseExceptionMeta 元类隐式装饰 Validator 类中的所有校验方法

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、代码实现3、测试代码4、日志输出 三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器,从编码到发布全过程》 2、相关回顾 使用 raise…

Qt QLineEdit文本框控件

文章目录 1 属性和方法1.1 占位字符串1.2 对齐方式1.3 回显模式1.4 读写控制1.5 格式控制1.6 信号和槽 2 实例2. 布局2.2 代码实现 QLineEdit 是Qt 中的文本框,准确地说是单行文本框,通常用于接受用户的输入。 比如用户输入用户名、密码等,都…

ChatGPT付费创作系统V2.5.5独立版+前端

ChatGPT付费创作系统V2.5.5版本优化了很多细节,功能增加增加长篇写作功能。该版本为编译版无开源,本版本特别处理了后台弹窗、暗链网址。特别优化了数据库。升级过程中未发现任何BUG,全新安装或者升级安装均未出现400或者500错误,…

【数据结构专题】「延时队列算法」史上手把手带你认识一下数据结构的基本概念与术语

在本节中,我们将对一些概念和术语赋以确定的含义,以便与读者取得“共同的语言”。这些概念和术语将在以后的章节中多次出现。 数据 概念 数据(data) 是对客观事物的符号表示, 在计算机科学中是指所有能输人到计算机中并被计算机程序处理的…

Python 工具 | conda 基本命令

Hi,大家好,我是源于花海。本文主要了解 Python 的工具的 conda 相关的基本命令。Conda 是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。在Windows下,需要安装…

Mobile Aloha 【软硬件原理+代码解析】

1. Mobile ALOHA Hardware2. Imitation Learning3. Co-training with Static ALOHA Data4. Task Setting5. Experiments5.1 ACT5.2 对比ACT、Diffusion Policy和VINN 6. Software Code Analyze Mobile ALOHA: 利用低成本全身远程操作系统学习复杂的双手移动操作技能 [译] 硬件代…

Elasticsearch基本操作之文档操作

本文来说下Elasticsearch基本操作之文档操作 文章目录 文档概述创建文档示例创建文档(生成随机id)创建文档(自定义唯一性标识) 查看文档示例根据主键查看文档查看所有文档 修改文档示例全局修改文档局部修改文档 删除文档示例根据文档的唯一性标识删除文档条件删除文档 本文小结…

【leetcode 447. 回旋镖的数量】审慎思考与推倒重来

447. 回旋镖的数量 题目描述 给定平面上 **n **对 互不相同 的点 points ,其中 points[i] [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的距离和 i 和 k 之间的欧式距离相等(需要考虑元组的顺序)。 返回平…

Linux引导过程和服务

一、Linux操作系统引导过程 1.引导过程 bios 加电自检——mbr——grub——加载内核——启动进程 加电后BIOS程序回自检硬件,硬件无故障后,会根据第一次启动项去找内核,一般来说第一启动项是硬盘,找到硬盘后,会根据mb…

深入了解网络流量清洗--使用免费的雷池社区版进行防护

​ 随着网络攻击日益复杂,企业面临的网络安全挑战也在不断增加。在这个背景下,网络流量清洗成为了确保企业网络安全的关键技术。本文将探讨雷池社区版如何通过网络流量清洗技术,帮助企业有效应对网络威胁。 ![] 网络流量清洗的重要性&#x…

第四站:指针的进阶-(二级指针,函数指针)

目录 二级指针 二级指针的用途 多级指针的定义和使用 指针和数组之间的关系 存储指针的数组(指针数组:保存地址值) 指向数组的指针(数组指针) 传参的形式(指针) 数组传参时会退化为指针 void类型的指针 函数指针 定义: 调用:两种方式:(*指针名)(参数地址) 或者 指针…

别闹了,真的不是你的技术菜!!!

最近经常听到有小伙伴总是在抱怨自己的技术菜,公司没有机会让自己去成长技术,于是小编就此场景来写一篇文章,希望对大家有帮助。 错误的理解CRUD工程师 CRUD工程师这个名称是很多小伙伴都听过的,并且很多工程师都把自己比作是代…