Gitlab搭建npm仓库

news/2025/1/15 7:46:42/文章来源:https://www.cnblogs.com/98kk/p/18672061

由于图片和格式解析问题,为了更好阅读体验可前往 阅读原文

:::warning
使用gitlab的仓库注册表特性需要版本14.0+,如果你的版本比较低,请先根据自己的需求合理升级后再使用
:::

npm私有仓库的搭建方式有很多种,比如使用docker(阅读此篇),这里讲述如何使用gitlab作为npm仓库方法,gitlab仓库有多种使用方法,这里都会讲解到。接下来就来学习下如何使用gitlab搭建npm仓库。

创建组与项目

为了方便演示这里从头讲起,分别创建组、项目

  1. 创建组
    image-20230321112321027
  2. 创建项目
    image-20230321112503456
    image-20230321112816193

初始化项目

本地创建一个简单的项目,推送到gitlab项目中

# 创建路径
mkdir gitlab-frontend-helper-lib && ccd gitlab-frontend-helper-lib# 初始化 npm
npm init

package.json文件内容实例:

{"name": "helper","version": "0.0.1","description": "前端通用库","main": "index.js","keywords": [],"author": "","license": "ISC"
}

创建index.js文件:

const add = (x, y) => x + y;
const minus = (x, y) => x - y;module.exports = { add, minus };

推送项目到gitlab

git initcat > .gitignore << EOF
node_modules
.DS_Store
EOFgit add .
git cm -m '初次提交(#0)'
git remote add origin http://192.168.10.10/frontend-lib/helper.git
git push --set-upstream origin main

项目作为依赖

你可以在某个项目中把刚刚上传的项目作为依赖安装,为了方便管理可以对上传的库打上tag,然后项目中可以下载指定tag

# gitlab-frontend-helper-lib 打tag
git tag 0.0.1
git push --tags

新建一个项目使用当前库:

mkdir gitlab-npm && cd gitlab-npm npm init -y

手动在package.json文件中添加待安装的依赖项目

{"name": "gitlab-npm","version": "1.0.0","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"keywords": [],"author": "","license": "ISC","dependencies": {// 这里指定 helper依赖的地址为 git+http://192.168.10.10/frontend-lib/helper.git,并使用 tag 0.0.1版本"helper": "git+http://192.168.10.10/frontend-lib/helper.git#0.0.1"},"description": ""
}

安装当前项目依赖:

➜ npm i
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN use-gitlab-npm@1.0.0 No description
npm WARN use-gitlab-npm@1.0.0 No repository field.added 1 package in 0.577s

验证helper包,创建js文件

// index.js
const helper = require("helper");
console.log(helper.add(1, 2));

执行打印

node index.js // 3

这种方式的使用比较简单,不过不够灵活,接下来使用gitlab官方的仓库注册表

Gitlab软件库

Gitlab支持包仓库注册了,也及时可以当做包仓库使用,需要版本14.0+,这里演示npm仓库注册表来管理npm包

注册表类型

gitlab支持两种的仓库注册表项目级别和示例级别(组级别),两者对于包的上传没有什么影响,只是作用于包的安装,包的注册表名字是scope形式,也就是说包名是@scope/packageName这种形式

  • 实例级别:你可以理解为group级别,必须提供一个范围的scope名字,当你需要在不同的组创建包时,可以使用@scope/packageName 引入,你可以为不同的组设置权限,公开使用
  • 项目级别:注册表 URL仅针对该范围更新。在项目级别注册包时,您可以使用/附加您自己的唯一范围到您的包名称

发布准备

这里修改前面的仓库

// package.json
{// 包名"name": "@frontend-lib/helper",// 包版本"version": "0.0.1","description": "前端通用库","main": "index.js","keywords": [],"author": "","license": "ISC"
}

创建.npmrc文件:

#@scope:registry=https://your_domain_name/api/v4/projects/your_project_id/packages/npm/
#//your_domain_name/api/v4/projects/your_project_id/packages/npm/:_authToken="${NPM_TOKEN}"
# 格式:
#  - scope:你的scopename
#  - your_domain_name:你的gitlab域名或ip
#  - your_project_id:你的仓库id
#  - NPM_TOKEN:用户发布的用户token# 示例
@frontend-lib:registry=http://192.168.10.10/api/v4/projects/4/packages/npm/
# 你可以直接将token写在这里
//192.168.10.10/api/v4/projects/4/packages/npm/:_authToken=HUzUdsos4WfnsgfUBi6j

记得忽略掉.npmrc追踪:

# .gitignore
.npmrc

发布npm包

发布npm包可以手动发布也可以自动构建发布,两种方式都演示下。本次演示项目上传至github了

  • https://github.com/ihengshuai/gitlab-practice/tree/main/gitlab-frontend-helper-lib
  • https://github.com/ihengshuai/gitlab-practice/tree/main/gitlab-npm

手动发布

创建token

image-20230321124138019

拿到token后将其写入.npmrc文件中

# 如果没有将token写入npmrc,可以用命令行传入
NPM_TOKEN=HUzUdsos4WfnsgfUBi6j npm publish# 这里写入了npmrc,然后发布
➜ npm publish
npm notice 
npm notice 📦  @frontend-lib/helper@0.0.1
npm notice === Tarball Contents === 
npm notice 94B  index.js    
npm notice 171B package.json
npm notice 15B  README.md   
npm notice === Tarball Details === 
npm notice name:          @frontend-lib/helper                    
npm notice version:       0.0.1                                   
npm notice package size:  369 B                                   
npm notice unpacked size: 280 B                                   
npm notice shasum:        25bcde10511ed5f253bdf2761f86a92d62959847
npm notice integrity:     sha512-0spZZ3DBZZhpM[...]yDmfOTOUq0rqQ==
npm notice total files:   3                                       
npm notice 
+ @frontend-lib/helper@0.0.1

可以看到发布成功,并标记是手动发布

image-20230321124452671

CI/CD自动构建npm包

以上便是手动发布npm包的整个流程,不过有很多不方便:

  • 存储发包token不能忘记
  • 手动执行

为了解决这些问题可以使用gitlab ci自动构建发布:

  1. 创建ci文件,指定发布到main指定分支时进行发包

    # .gitlab-ci.yml
    image: node:16-alpinestages:- deploydeploy_npm:stage: deployonly:- maintags:- testingscript:- npm config set registry https://registry.npm.taobao.org- npm install- npm run build- echo "@frontend-lib:registry=http://192.168.10.10/api/v4/projects/${CI_PROJECT_ID}/packages/npm/" > .npmrc- echo "//192.168.10.10/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=${NPM_TOKEN}" >> .npmrc- npm publish
    
  2. 创建换将CI变量NPM_TOKEN,将值设置为发包的token

    image-20230321134742476

  3. 为了防止后续开发可以删除本地.npmrc文件

  4. 修改版本号提交代码

    # package.json
    # version: 0.0.3git add .
    git cm -m 'add ci(#0)'
    git push
    
  5. 查看流水线执行情况
    image-20230321135048568

    image-20230321135116085

  6. 查看仓库,这里我发了两次
    image-20230321135219054

使用npm包

使用npm包你可以用根端点或项目端点

  1. 新建一个项目初始化,创建.npmrc文件,根据提示写入仓库地址:
    image-20230321140703921

    @frontend-lib:registry=http://192.168.10.10/api/v4/packages/npm/# 如果你的项目或组需要权限才能访问就需要添加token
    # //192.168.10.10/api/v4/projects/4/packages/npm/:_authToken=jev-72gFiNtp1JGTLZFn
    

    这里你可以选择根配置或者项目级别的配置都可以

  2. 下载npm包

    npm i @frontend-lib/helper# 示例
    ➜ npm i @frontend-lib/helper
    npm notice created a lockfile as package-lock.json. You should commit this file.
    npm WARN use-gitlab-npm@1.0.0 No description
    npm WARN use-gitlab-npm@1.0.0 No repository field.+ @frontend-lib/helper@0.0.3
    added 1 package in 0.537s# 测试代码
    ➜  gitlab-npm node index.js             
    5
    

如果你下载失败了如404、401,很大原因是没有权限,通过将项目或组的权限设置public解决,或者提供用户token就可以了

参考文档

  • https://docs.gitlab.com/ee/user/packages/package_registry/
  • https://docs.gitlab.com/ee/user/packages/npm_registry/
  • https://docs.gitlab.com/ee/user/packages/yarn_repository/

由于图片和格式解析问题,为了更好阅读体验可前往 阅读原文

📷

image

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

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

相关文章

k8s~控制deamonset中pod的数量

DaemonSet 是 Kubernetes 中的一种控制器,用于确保集群中的每个节点(或特定标签选择器匹配的节点)运行一个 Pod 的副本。DaemonSet 通常用于运行集群守护进程,如日志收集、监控代理、存储卷插件等。以下是如何控制 DaemonSet 中 Pod 数量的方法:使用节点选择器(Node Sele…

读量子霸权04量子计算机的黎明

量子计算机的黎明1. 晶体管的诞生 1.1. 1956年,三位物理学家因发明了这种神奇的装置而获得诺贝尔奖:贝尔实验室的科学家约翰巴丁、沃尔特布拉顿和威廉肖克利1.1.1. 巴丁、布拉顿和肖克利使用了一种新的量子形式的物质,即半导体1.1.2. 金属是允许电子自由流动的导体1.1.3. 玻…

Arch Linux默认中文输入法设置输入关键字直接给出日期和时间

自定义词组就行,关键字如下#$year年$month月$day日 星期$weekday $fullhour:$minute:$second如下图, 设置里-输入法,进入输入法菜单界面,选择你的输入法设置进入到你的中文输入法设置界面后,拉到中间的位置,有一个【管理自定义词组】,点进去 添加一个词组,把上面的词组…

互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(二):用.NET IoT库编写驱动控制两个屏幕

前言 从.NET IoT入门开始这篇文章想必大家应该都看过了,也有很多人都该着手购买树莓派Zero 2W进行上手体验了,那么我们这篇文章就开始真正的实践了,玩硬件肯定是要亲自操作得出成果才会开心,由于牵扯到硬件,所以有的时候软件没问题,但是硬件接线错误或者接触不良都会结果…

openGauss训练营第二期结营!一百个QA和PPT合辑大放送

2021年9月11-12日,由openGauss内核项目研发经理、openGauss社区Maintainer、openGauss布道师朱金伟老师领衔,联合openGauss社区、Gauss松鼠会、云和恩墨的专家们组织的第二期“8小时玩转openGauss训练营”活动通过线上直播的方式举办,获得圆满成功。本次参与学员超千人,最终…

我们一起聊聊数据库的可观测性

我们一起聊聊数据库的可观测性作者:白鳝2022-08-16 07:49:48 数据库其他数据库 云原生应用来是更为复杂和无序的,而对于数据库来说,相对来说要简单一些。因为数据库系统是按照某种客观规律组织起来的,其内在规律可以被数字化。因此也有一些运维专家认为数据库不需要搞什么可…

Ansible模块使用指南

作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 目录一.ansible模块概述1.ansible模块数量井喷式增长2.模块分类二.Ansible常用模块1.command模块1.1 command模块概述1.2 command模块示例2.shell模块2.1 shell模块概述2.2 shell模块示例3.script模块3.1 scr…

【Linux搭建教程】Linux 安装多个jdk版本并进行快速切换、以jdk8和jdk17为例【测试成功】

一、问题背景 由于项目需要,环境分别使用到jdk 8版本和jdk 17版本,故需要共存并配置快速切换。 二、具体实现 1、正常配置俩个jdk环境变量; 2、修改环境变量alias配置快速切换 vim /etc/profile #编辑以下内容信息alias java17=export JAVA_HOME=/usr/java/jdk-17.0…

【Redis源码】轻松看懂 rdb 文件

一、数据存储格式二、查看rdb文件 查看文件16进制编码 #od -A x -t x1c -v dump.rdbRDB文件格式如下: 0000000 52 45 44 49 53 30 30 30 38 fa 09 72 65 64 69 73R E D I S 0 0 0 8 372 \t r e d i s 0000010 2d 76 65 72…

【供应链管理系统】你了解供应链管理的五大系统(ERP、WMS、TMS、CRM和OMS)吗?

供应链管理听起来可能很复杂,但它其实是现代企业运营中不可或缺的一部分。 想象一下,从生产原材料到产品配送到客户手中,这整个过程是如何协调运作的。 每个环节需要无缝对接,确保产品的及时生产、运输和交付。 而要想高效地完成这些任务,企业就需要依赖一系列强大的系统工…

【C++安全】C++ 直接编写 Shellcode 和使用常量字符串

免责声明: 该公众号分享的安全工具和项目均来源于网络,仅供安全研究与学习之用,如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。一、基础知识1. PE 文件的基本结构和作用2. PE 文件加载流程3. 章节总结 二、编写 MessageBox Shellcode1. 开始2…

Easysearch Rollup 使用指南

背景 在现代数据驱动的世界中,时序数据的处理变得越来越重要。无论是监控系统、日志分析,还是物联网设备的数据收集,时序数据都占据了大量的存储空间。随着时间的推移,这些数据的存储成本和管理复杂度也在不断增加。 为了解决这一问题,Rollup 技术应运而生。本文将带你深入…