前端vue3一键打包发布

news2024/11/18 11:51:07

一键打包发布可以分为两种,一是本地代码,编译打包后发布至服务器,二是直接在服务器上拉去代码打包发布至指定目录中。
两种各有使用场景,第一种是前端开发自己调试发布用的比较多,第二种是测试或者其他人员用的多,前端开发将代码上传至git中,测试人员可以在服务器上拉取指定分支如release_V0.1,然后打包发布用于测试。

一、本地代码一键打包发布

工具:vscode
项目:vue3+ts+vite+yarn

1、安装插件

yarn add shelljs
yarn add ssh2
yarn add ssh2-sftp-client

Shelljs是Node.js下的脚本语言解析器,具有丰富且强大的底层操作(Windows/Linux/OS X)权限。Shelljs本质就是基于node的一层命令封装插件,让前端开发者可以不依赖linux也不依赖类似于cmder的转换工具,而是直接在我们最熟悉不过的javascript代码中编写shell命令实现功能。

ssh2-sftp-client是node.js 的 SFTP 客户端,一个围绕SSH2的包装器,它提供了一个高级的便利抽象以及一个基于 Promise 的 API。

ssh2用于连接服务器,操作服务器上的文件

2.建立配置文件publish/config.js

文件目录:
在这里插入图片描述

因为我们可能会有测试环境和发布环境,可以直接通过配置和命令来区分即可,后面都用测试环境为例

const devConfig={
  ip:'192.168.1.xx',
  port:'22',
  username:'huolala',
  password:'123456',
  rmpath:'/home/huolala/dist',
  path:'/home/huolala/dist',
  runPath:'/opt/service/www/dist',
}
const prodConfig={
  ip:'192.168.1.xx',
  port:'22',
  username:'huolala',
  password:'123456',
  rmpath:'/home/huolala/dist',
  path:'/home/huolala/dist',
  runPath:'/opt/service/www/dist',
}
module.exports={
  devConfig:devConfig,
  prodConfig:prodConfig
}

3. 配置打包文件publish/dev/build.js

打包完成后,将打包后的dist文件上传至服务器自己的工作目录下


const {devConfig} = require('../config')
const shell = require('shelljs')
const path = require('path')
const Client = require('ssh2-sftp-client')
// 打包 npm run build
const compileDist = async() => {
  if (shell.exec(`yarn build`).code === 0) {
    console.log('打包成功')
  }
}

async function connectSSh() {
  const sftp = new Client()
  sftp.connect({
    host: devConfig.ip, // 服务器 IP
    port: devConfig.port,
    username: devConfig.username,
    password: devConfig.password
  }).then(() => {
    console.log('先执行删除服务器文件')
    return sftp.rmdir(devConfig.rmpath, true)
  }).then(() => {
    // 上传文件
    console.log('删除成功,开始上传')
    return sftp.uploadDir(path.resolve(__dirname, '../../dist'), devConfig.path)
  }).then(() => {
    console.log('上传完成,开始拷贝至运行目录')
  }).catch((err) => {
    console.log(err, '失败')
  }).finally(() => {
    sftp.end()
  })
}
async function runTask() {
  await compileDist() // 打包完成
  await connectSSh() // 提交上传至个人目录
}
runTask()

4. 配置上传文件publish/dev/upload.js

这里只是完成从服务器的个人目录/home/huolala/dist拷贝至服务器的主目录/opt/service/www/dist。一般在项目中,服务器opt目录为了保证安全,普通开发者是没有太多权限的,所以只能先上传至自己的目录再拷贝过去

const {devConfig} = require('../config')
const {Client} = require('ssh2')

async function connectSSh() {
  const conn  = new Client()
  conn.on('ready', () => {
    console.log('Client :: ready');

    conn.sftp(async(err, sftp) => {
      if (err) throw err;
      conn.shell((err, stream) => {
        if (err) throw err;
        stream.on('close', () => {
          console.log('Stream :: close');
          conn.end();
        }).on('data', (data) => {
          console.log('OUTPUT: ' + data);
        });
        stream.end(`sudo cp -r dist/* ${devConfig.runPath}\n${devConfig.password}\nexit\n`);
      });

    });


  }).connect({
    host: devConfig.ip, // 服务器 IP
    port: devConfig.port,
    username: devConfig.username,
    password: devConfig.password
  });
}
async function runTask() {
  await connectSSh() // 拷贝至服务器目录,即根目录
}
runTask()

5. 配置本地命令行

代码写好后,这时候需要去packag.json文件里配置命令行

"scripts": {
	...
	"publish:dev": "node publish/dev/build.js && node publish/dev/upload.js",
    "publish:prod": "node publish/prod/build.js && node publish/prod/upload.js"
}

6. 一键打包上传

yarn publish:dev

成功后
在这里插入图片描述

运行命令行即可,成功后就可以去服务器目录下查看是否是最新的文件了,以后每次更改完只需要一句就行了

前端一键自动化打包部署

二、服务器打包发布

前面说了,有时候开发只是负责代码提交,其他人员如测试负责打包部署和安装,这时需要在服务器直接拉取代码
工具:FinalShell
项目:vue3+ts+vite+yarn

https://blog.csdn.net/AngelLover2017/article/details/84801673

1. 命令行安装nodejs,npm

//这种方式安装是不能指定版本的,如果觉得版本低可以指定版本
sudo apt install nodejs
sudo apt install npm


//安装成功后验证
nodejs --version

上是通过Linux的命令行安装的,这种方式安装是不能指定版本的,如果觉得版本低可以指定版本

//使用npm安装n模块,n模块是专门用来管理nodejs版本的,名字就叫n执行命令
sudo npm install -g n
sudo n stable(稳定版本),或者指定版本sudo n 14.17.4

也可以通过下载安装包安装,网上可以自行搜索

2.安装脚手架yarn

sudo apt install yarn

//安装成功后验证
yarn --version

我看有人说安装后老是失败不起作用,我也搜到了一个解决方案

//先执行上方安装命令,如果失败了再运行以下
sudo apt remove cmdtest
sudo apt remove yarn
sudo npm install -g yarn
//注意: 指令命令后需要重启终端再输入yarn install

亲测有效

3.安装git

在Linux上是有yum安装Git,非常简单,只需要一行命令

yum -y install git

//安装成功后验证
git --version

4.获取代码并打包发布

进入自己的项目目录下,去拉取代码,打包,然后再拷贝至opt目录下


git clone  http://192.168.1.239/enterprise/xxxxx.git
//然后输入账户和密码
yarn install
//因为我项目用了cross-env,而cross-env是window的独有环境,Linux需要安装,没有用到的忽略
sudo npm install cross-env
//打包
yarn build
//拷贝代码
sudo cp -r dist/* /opt/service/www/dist

到此,发布的就都完成了。
后期再发布的时候,就拉取指定分支代码,打包发布即可即只需要执行以下流程即可:

git pull
yarn build && sudo cp -r dist/* /opt/service/www/dist

参考1:Ubuntu 升级npm 以及安装cross-env 过程中遇到的问题
参考2:Vite:Error: Cannot find module ‘worker_threads‘
参考3:The engine “node” is incompatible with this module.。
参考4:使用yarn install时报错
参考5:linux下git拉取代码到本地

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

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

相关文章

java 二维数组的定义及操作

二维数组的定义有很多方式: 第一种方式: 数据类型[][] 数组名 new数据类型[行的个数][列的个数]; 下面以第一种方式声明一个数组,如下所示。 int[][] xx new int[3][4]; 表示有三行,每行方四个数据第二种方式: 数据类…

甘特图控件DHTMLX Gantt入门使用教程【引入】:dhtmlxGantt 与Node.js(上)

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求,具备完善的甘特图图表库,功能强大,价格便宜,提供丰富而灵活的JavaScript API接口,与各种服务器端技术&am…

Vue3-黑马(三)

目录: (1)vue3-基础-计算属性 (2) vue3-基础-xhr-基本使用 (3)vue3-基础-xhr-promise改造 (1)vue3-基础-计算属性 上面有重复的代码,用计算属性&#xff0…

Kali工具集简介

Kali Linux提供了数种经过定制的专门为渗透测试设计的工具。工具都会按下图中下拉选单所示的方式按组分类聚合。了解工具是做渗透测试第一个认知。 口Information Gathering(信息收集) 这些都是侦察工具,用来收集目标网络和设备的数据。在这类工具中,从找出设备的工具到查看使…

大数据分析案例-基于高斯朴素贝叶斯算法构建良恶性肿瘤识别器

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

时间复杂度和空间复杂度的七七八八

文章目录 时间空间复杂度1. 时间空间复杂度的重要性(作用)2. 时间复杂度和大O表示法1)算法图解2)代码随想录3)王道《数据结构》 3. 大O指的是最糟的情形和一般的情形1)大O表示的是一般情况,并不是严格的上界2&#xff…

算法修炼之练气篇——练气四层

博主:命运之光 专栏:算法修炼之练气篇 前言:每天练习五道题,炼气篇大概会练习200道题左右,题目有C语言网上的题,也有洛谷上面的题,题目简单适合新手入门。(代码都是命运之光自己写的…

创建虚拟目录和用户访问控制+虚拟目录

目录标题 虚拟目录配置文件创建配置文件对应的目录资源在创建一个虚拟目录的配置文件 用户访问控制虚拟目录创建用户访问控制权限创建配置文件中的用户资源测试tom用户测试zhangsan用户 虚拟目录 Alias 虚拟目录名称 真是目录路径为了方便对于网站资源进行灵活管理&#xff0c…

使用 MVC 模式,实现简单登录功能 (Kotlin)

先放效果图: 第一张是登录页面效果图。用户输入登录名和密码,经过后台的非空验证和固定值验证,跳转到首页 第二张是首页效果图。用户点击 “update” 显示用户名和密码 这里的用户名和密码是后台设置的固定值,整体的登录逻辑特别…

python+opencv图像形态变换

形态变换主要用于二值图像的形状操作,形态变换的实现原理基于数字形态学。数字形态学也称形态学,它主要从图像内部提取信息来描述图像形态。形态学广泛应用于视觉检测、文字识别、医学图像处理、图像压缩编码等。形态变换主要包括腐蚀、膨胀和高级形态操…

Linux aarch64架构中使用docker安装mysql8

Linux aarch64架构中使用docker安装mysql8 1、遇到问题: 官网下载mysql包,安装完成后,启动mysql一直显示-bash: ./mysqld: 无法执行二进制文件。 网上找了各种资料,但是都没有作用,怀疑自己操作姿势不正确&#xff…

面试题集合

Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。 从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提…

DNS:DNS域名解析过程及原理

一、理解IP和域名 我们首先要了解域名和IP地址的区别。 IP地址是互联网上计算机唯一的逻辑地址。 通过IP地址实现不同计算机之间的相互通信,每台联网计算机都需要通过IP地址来互相联系和分别。 但由于IP地址是由一串容易混淆的数字串构成,人们很难记忆所…

C基础 --- 因为整型提升导致的BUG

为什么会做整型提升 通常情况下,在对int类型的数值作运算时,CPU的运算速度是最快的。在x86上,32位算术运算的速度比16位算术运算的速度快一倍。C语言是一个注重 效率的语言,所以它会作整型提升,使得程序的运行速度尽可…

基于ChatGPT AI自动产生Shader,AI自动产生AICommand

AIEngine 基于ChatGPT AI自动产生Shader 代码地址:https://github.com/ManoKing/AIEngine 使用方法: 1,打开 Window/Package Manager 2,选择 /Add package from git URL… 3,添加URL: https://github.com/ManoKing/…

VMware Aria Automation Orchestrator 8.12 - 现代工作流程自动化平台

VMware Aria Automation Orchestrator 8.12 - 现代工作流程自动化平台 请访问原文链接:https://sysin.org/blog/vmware-aria-automation-orchestrator/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 现代工作流程…

民谣女神唱流行,基于AI人工智能so-vits库训练自己的音色模型(叶蓓/Python3.10)

流行天后孙燕姿的音色固然是极好的,但是目前全网都是她的声音复刻,听多了难免会有些审美疲劳,在网络上检索了一圈,还没有发现民谣歌手的音色模型,人就是这样,得不到的永远在骚动,本次我们自己构…

艺术家林曦老师新书《无用之美》即将发售,其中甘美提前与君共享~

十多年前,艺术家林曦老师做了一次主题为“无用之美”的演讲,从那时到现在,也一直教授着以“美”为核心的课程。经过十年的教学、和糯糯小朋友的相处,林曦老师觉得自己对这个主题有了更多的感触。      “有用的世界”繁复疲惫…

科技云报道:Serverless或许没有你想象中的安全

科技云报道原创。 随着云计算技术的进一步成熟,Serverless已成为引领云计算下一个十年的技术热点。 Serverless能够帮助开发者无需关注服务器、按照实际使用付费且可以享受服务自动弹性伸缩,将更多的精力放到业务逻辑本身。据Gartner预测,2…

Swift AsyncThrowingStream 和 AsyncStream Demo 演示

文章目录 前言什么是 AsyncThrowingStream?调整现有代码以使用流什么是 AsyncStream?AsyncThrowingStreamAsyncThrowingStream 迭代调试 AsyncStream取消一个 AsyncStream结论 前言 AsyncThrowingStream 和 AsyncStream 是 Swift 5.5 中由 SE-314 引入的并发框架的…