IDEA实现NPM项目的自打包自发布自部署

目录

前言

正文

操作背景

NPM自发布

Package自发布

NPM部署

尾声


 

  • 🔭 Hi,I’m Pleasure1234
  • 🌱 I’m currently learning Vue.js,SpringBoot,Computer Security and so on.
  • 👯 I’m studying in University of Nottingham Ningbo China
  • 📫 You can reach me by url below:
  • My Blog Website: https://blog.yiming1234.cn 
  • My CSDN Blog: https://yiming1234.blog.csdn.net
  • My Email:Pleasure@yiming1234.cn
  • My Github:Pleasurecruise (自由的世界人) · GitHub
  • It's my pleasure to see you follow me!

原文地址:IDEA实现NPM项目的自打包自发布自部署 - Pleasure的博客

下面是正文内容:


前言

最近在研究项目的打包发布以及其在生产环境下的部署

谈谈Vue前端项目的自动打包,以及发布到Github Packages和部署到服务器

注:由于本人将前端项目和后端项目放置在了一个项目文件夹下,所以统一使用IDEA进行打开运行以及编辑。还是推荐使用WebStorm来进行前端项目的编辑(或者VScode)

还是以之前的这个校园墙仓库为例,注:使用的node版本是12.22.12

Github仓库地址:GitHub - Pleasurecruise/NottinghamWall: 宁波诺丁汉大学校园墙(个人项目,管理端已上线)

管理端项目地址:NottinghamWall/backend at main · Pleasurecruise/NottinghamWall · GitHub

正文

操作背景

在上一篇文章中我已经提到了相同的内容,这里在旧事重提一下

项目仓库每次进行更改更新的时候都需要重新进行打包发布非常的麻烦,所以可以用Github Action来替代这一重复的操作,实现自动化操作,提高开发效率和软件质量。

GitHub CLI(Command-Line Interface)是 GitHub 提供的一个命令行工具,旨在使用户能够从终端或命令行界面直接与 GitHub 交互。通过 GitHub CLI,用户可以执行许多在 GitHub 网站上执行的操作

Continuous Integration (CI):持续集成。开发人员频繁地将代码变更合并到主分支中,每次合并都会触发自动化构建和测试过程。这种方法能够快速发现和修复问题,确保代码库始终处于一个可工作状态。

Continuous Deployment (CD):持续部署。每次通过自动化测试的代码变更都会自动部署到生产环境中。这意味着代码一旦被提交并通过测试,就会立即被发布给用户。持续部署要求非常高的自动化测试覆盖率和严格的质量控制。

NPM自发布

参考资料:发布 Node.js 包 - GitHub 文档

在npm发布自己的组件包_npm 本地组件发布-CSDN博客

当我们在Github Action工作流中搜索Publish Node就可以看到我下面要介绍的两个配置文件

本人针对实际操作需要进行了一定更改

下面的配置文件实现的主要操作:

在admin文件夹下有新的push文件的时候触发操作

build步骤中:npm install

publish步骤中:npm publish

npm publish.yml

name: Node.js Publish
on:push:branches:- mainpaths:- 'admin/**'
jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- name: Use Node.js 20uses: actions/setup-node@v3with:node-version: 20- name: Install dependenciesrun: npm installworking-directory: ./adminpublish:needs: buildruns-on: ubuntu-latestpermissions:contents: readpackages: writesteps:- uses: actions/checkout@v3- name: Use Node.js 20uses: actions/setup-node@v3with:node-version: 20- name: Publish to npmrun: |echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > ~/.npmrcnpm publish --access public --registry=https://registry.npmjs.org/env:NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}working-directory: ./admin

NPM_TOKEN的设置

实现效果:

Package自发布

注意和发布npm的入口网址不同,一个是https://registry.npmjs.org/,另一个是https://npm.pkg.github.com/

release-package.yml

name: Node.js Package Release
on:push:branches:- mainpaths:- 'admin/**'
jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- name: Use Node.js 20uses: actions/setup-node@v3with:node-version: 20- name: Install dependenciesrun: npm installworking-directory: ./adminpublish:needs: buildruns-on: ubuntu-latestpermissions:contents: readpackages: writesteps:- uses: actions/checkout@v3- name: Use Node.js 20uses: actions/setup-node@v3with:node-version: 20- name: Publish to GitHub Packagesrun: |echo "//npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}" > ~/.npmrcnpm publish --registry=https://npm.pkg.github.com/env:NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}working-directory: ./admin

另外还需要在package.json中设置仓库地址等信息

{"name": "@octocat/my-package","repository": {"type": "git","url": "https://github.com/octocat/my-other-repo.git"},

二者的配置文件仅在最后一步的发布位置上存在差异(一开始尝试将两个配置文件合二为一不知道为什么没有成功......)

注意事项:

①每次在push的时候不能上传相同的内容,同时需要在package.json中更新每次push的版本号

②由于Github Action限制,Node版本只能设置20

③由于免费账号限制,仓库属性必须为public而不是private

④这里的GITHUB_TOKEN不需要特意设置

⑤项目模块在右上角的设置-项目结构-导入模块中进行导入

NPM部署

看之前的操作好像都是在npm build之后,将项目根目录下的dist文件夹上传至服务器然后以HTML网站的形式来实现运行

但是现在宝塔面板的网站类型中提供了Node项目这个选项,所以就将整个admin项目进行了上传

没有找到好的自部署方法......直接压缩后上传吧

这里将管理端的Node项目文件放置在了/www/NottinghamWall/admin文件夹下

当看到显示项目在运行中,并且在项目日志中看到下面的内容就说明启动成功了

可能会用的到的指令:sudo lsof -i:8888 kill -9 PID

尾声

笔记总结于鄙人代码日常

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

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

相关文章

射线和平面求交

射线和平面求交 1、平面方程 如果已知平面的高度(即沿法向量方向的距离)为 height,平面方程可以表示为: n ^ ⋅ p h e i g h t \bold{\hat{n}} \cdot p height n^⋅pheight p p p 是平面上的任意一点 height 的正负取决于法向量…

W外链创建抖音私信卡片教程,私信卡片跳转微信工具

W外链地址wai.cn 在数字化时代的浪潮中,私域流量的价值愈发凸显,成为企业获取用户、建立品牌忠诚度、提升转化率的关键手段。抖音,作为当下最热门的短视频社交平台之一,其用户基数庞大、互动性强,为企业私域引流提供了…

一些颜色的RGB整理

(214,219,233) (215,220,230) (189,189,189) (193,210,240) (190,210,240) (0,60,119) (0,60,120) (230,230,250)

初识Docker及管理Docker

Docker部署 初识DockerDocker是什么Docker的核心概念镜像容器仓库 容器优点容器在内核中支持2种重要技术:Docker容器与虚拟机的区别 安装Docker源码安装yum安装检查Docker Docker 镜像操作配置镜像加速器(阿里系)搜索镜像获取镜像查看镜像信息…

计算机网络技术期末复习

一. 填空 在采用电信号表达数据的系统中,数据有 数字数据 和 模拟数据 两种。域名系统DNS是一个 分布式数据库 系统。TCP/IP的网络层最重要的协议是 IP互连网协议,它可将多个网络连成一个互连网。 4. 在TCP/IP层次模型的网络层中包括的协议主要有ARP 、…

科技出海|百分点科技智慧政务解决方案亮相非洲展会

近日,华为非洲全联接大会在南非约翰内斯堡举办,吸引政府官员行业专家、思想领袖、生态伙伴等2,000多人参会,百分点科技作为华为云生态合作伙伴,重点展示了智慧政务解决方案,发表《Enable a Smarter Government with Da…

Web开发:卡片翻转效果(HTML、CSS)

目录 一、实现效果 二、完整代码 三、实现过程 1、页面结构 2、初始样式 3、翻转效果 4、图片大小问题 一、实现效果 如下图所示,当鼠标移入某个盒子,就反转这个盒子,并显示其背面的内容——卡片翻转效果; 卡片翻转效果 二…

Linux网络编程-socket套接字使用详解

1.概念 在Linux中,套接字(socket)是一种通信机制,用于实现不同进程之间或同一主机上的不同线程之间的数据交换。它是网络编程的基础,允许应用程序通过网络进行通信,也可以在同一台机器上的不同进程间进行通…

集群服务器如何解决跨服务器通信?大量并发通信问题?

Nginx tcp负载均衡模块: 1.将client的请求按照 负载均衡算法 分发到服务器 2.负载均衡器与服务器保持心跳机制,监测故障、保障服务可靠性 3.可以发现添加新的服务器,方便扩展服务器集群的数量 Nginx反向代理用途: 2.4 用途 …

在golang中Sprintf和Printf 的区别

最近一直在学习golang这个编程语言,我们这里做一个笔记就是 Sprintf和Printf 的区别 fmt.Sprintf 根据格式化参数生成格式化的字符串并返回该字符串。 fmt.Printf 根据格式化参数生成格式化的字符串并写入标准输出。由上面就可以知道,fmt.Sprintf返回的…

php随机海量高清壁纸系统源码,数据采集于网络,使用很方便

2022 多个分类随机海量高清壁纸系统源码,核心文件就两个,php文件负责采集,html负责显示,很简单。做流量工具还是不错的。 非第三方接口,图片数据采集壁纸多多官方所有数据! 大家拿去自行研究哈&#xff0…

在 Windows 上开发.NET MAUI 应用_2.生成你的第一个应用

先决条件 Visual Studio 2022 17.8 或更高版本,并安装了 .NET Multi-platform App UI 工作负载。 可参考上一篇文章:http://t.csdnimg.cn/n38Yy 创建应用 1.启动 Visual Studio 2022。 在开始窗口中,单击“创建新项目”以创建新项目&#…

【B树、B-树、B+、B*树】

目录 一、B-树(即B树)的定义及操作1.1、定义1.2、操作1.2.1、查找1.2.2、插入1.2.3、删除 二、B树的定义及操作2.1、定义2.2、操作2.2.1、查找2.2.2、插入2.2.3、删除 三、B*树 一、B-树(即B树)的定义及操作 1.1、定义 B-tree即…

【c++11】什么情况下需要封装set/get

文章目录 一、平凡类型与非平凡类型什么时候使用set/get1.平凡类型2.非平凡类型 二、构造函数参数较多解决办法1.把所有参数放到一个结构体里面2.使用build设计模式 三、如果构造函数众多(参数很多)1.模仿make_unique,就地构造2.基于build设计…

Missing script:‘dev‘

场景: npm run dev 原因:没有安装依赖,可用镜像安装(详见下图ReadMe 蓝色字体),没安装依赖可从package-lock.json文件是否存在看出,存在则有依赖 解决:

二叉树、B树/B-树

二叉树 在中文语境中,节点结点傻傻分不清楚,故后文以 node 代表 "结点",root node 代表根节点,child node 代表 “子节点” 二叉树是诸多树状结构的始祖,至于为什么不是三叉树,四叉树,或许是因为计算机只能数到二吧,哈哈,开个玩笑。二叉树很简单,每个 no…

useState函数

seState是一个react Hook(函数),它允许我们像组件添加一个状态变量,从而控制影响组件的渲染结果 数据驱动试图 本质:和普通JS变量不同的是,状态变量一旦发生变化组件的视图UI也会随着变化(数据驱动试图) 使用 修改状态 注意&am…

单链表算法 - 链表分割

链表分割_牛客题霸_牛客网现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的。题目来自【牛客题霸】https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70思路: 代码: /* struct ListNode {int val;struct List…

英福康INFICON TranspectorWare v3 RGA软件操作说明

英福康INFICON TranspectorWare v3 RGA软件操作说明

Python一对一辅导答疑|Rust 德国

你好,我是悦创。 下面是答疑内容。 在 Rust 中,方法的调用方式通常取决于它们是如何定义的。在你的例子中,print_drink方法最初是作为一个接受Drink类型实例作为参数的关联函数(类似于静态方法)定义的。后来&#xff…