如何搭建企业的npm仓库

前言

前段时间为公司搭建了npm仓库,在这里做下记录。

解决方案

使用CNPM来搭建公司内网, CNPM是一个Node.js的仓库,致力于打造私有的NPM注册服务。我们可以在CNPM发布私有的库。CNPM对NPM做了镜像服务,定期同步NPM的资源。

搭建CNPM的服务器

准备好环境
npm, node, mysql,npm账号

通过github下载项目源代码

git clone https://github.com/cnpm/cnpmjs.org.git
cd cnpmjs.org

安装依赖

sudo npm install

创建mysql数据库,数据库名cnpm;

复制docs/db.sql生成数据库表

修改项目中./config/index.js文件,修改mysql数据库的用户名和密码;

mysqlServers: [
	 {
	    host: '127.0.0.1',
	    port: 3306,
	    user: 'root',
	    password: ''
	 }
 ],
 mysqlDatabase: 'cnpm'

然后启动cnpm服务器

npm run dev

访问http://127.0.0.1:7002应该就可以成功访问了。

发布cnpm包

安装cnpm客户端

sudo npm install -g cnpm

设置cnpm源

cnpm config set registry="http://127.0.0.1:7001" --scope=@cnpm //cnpm是模块前缀

进入要发布的项目目录下

npm init

按提示录入包的信息

封装包的信息

cnpm adduser

按照提示录入用户名,密码,邮箱,用户名与邮箱需与config文件中的admin配置一致。

cnpm login

按照提示录入用户信息。注意模块名称必须带前缀,如@xxx/name,与config中的scopes配置对应,然后执行:

cnpm publish

到这里应该已经已经发布成功了。

安装私有的npm包

如果应用中所有的依赖库都是从公司内网下载的,我们可以给这个应用设置私有库。

npm config set registry http://xxx.com

如果只需某个依赖库是从公司私有库下载的,直接执行下面的命令

npm install xxx --registry=http://xxx.com
<think>我们正在处理用户关于搭建内网私有npm仓库的问题。根据引用内容,我们可以总结出以下关键点: 1. 引用[1]和[2]都提到了在内网搭建npm私有仓库的需求,原因包括:不能发布到公网、内网资限制、项目间依赖等。 2. 引用[1]和[2]提到了两个工具:Verdaccio和sinopia(其中引用[1]推荐Verdaccio,引用[2]提到sinopia是主流,但注意sinopia已经停止维护,而Verdaccio是sinopia的一个分支并且持续更新)。 3. 引用[3]展示了使用nrm管理多个npm仓库,其中包括一个本地私有仓库(地址为http://本机ip:4873/),这很可能是Verdaccio或sinopia的默认端口。 4. 引用[4]介绍了如何安装私有仓库中的npm包,有两种方式:在package.json中直接写tgz文件的完整URL,或者配置.npmrc文件指定scope对应的registry。 因此,我们可以向用户推荐使用Verdaccio来搭建内网npm私有仓库,并指导如何安装、配置、使用以及发布包到私有仓库。 回答结构: 1. 介绍Verdaccio 2. 安装Verdaccio 3. 运行和配置Verdaccio 4. 设置Verdaccio为内网服务(使其他机器可访问) 5. 使用nrm管理多个npm仓库(可选,方便切换) 6. 发布包到私有仓库 7. 从私有仓库安装包(参考引用[4]的两种方式) 注意:由于用户需求是内网使用,因此需要确保Verdaccio运行在内网可访问的机器上。 同时,根据系统级指令,我们需要生成相关问题。</think>### 内网私有npm仓库搭建指南 #### 1. 工具选择 推荐使用 **Verdaccio**(轻量级、持续维护)或 **Sinopia**(已停止更新)作为私有仓库工具。Verdaccio 支持以下特性: - 零配置快速启动 - 私有包作用域管理(`@scope/package`) - 代理缓存公有包(减少公网依赖) - 基于 Node.js 的权限控制 ```bash # 安装命令 npm install -g verdaccio ``` #### 2. 基础部署流程 1. **服务器安装**(在内网机器执行): ```bash # 全局安装 npm install -g verdaccio # 启动服务(默认端口4873) verdaccio ``` 服务将启动在 `http://localhost:4873` 2. **配置内网访问**: 修改配置文件 `~/.config/verdaccio/config.yaml`: ```yaml listen: 0.0.0.0:4873 # 允许所有IP访问 uplinks: npmjs: url: https://registry.npmjs.org/ # 代理公有仓库 ``` 3. **设置开机自启**(Linux): ```bash sudo npm install -g pm2 pm2 start verdaccio pm2 save pm2 startup ``` #### 3. 客户端配置 1. **添加私有仓库**: ```bash nrm add private http://[服务器IP]:4873 # 使用nrm工具 nrm use private ``` 或直接修改 `.npmrc`: ```ini registry=http://[服务器IP]:4873 # 作用域包专用配置(引用[4]) @mycompany:registry=http://[服务器IP]:4873 ``` 2. **用户认证**: ```bash npm adduser --registry http://[服务器IP]:4873 ``` #### 4. 包管理操作 | **操作** | **命令** | |----------------|------------------------------------------| | 发布私有包 | `npm publish --registry http://[IP]:4873` | | 安装混合依赖 | `npm install lodash @mycompany/utils` | | 查看仓库内容 | 访问 `http://[IP]:4873` 浏览器界面 | #### 5. 安全增强建议 1. 启用 HTTPS(使用 Nginx 反向代理) 2. 配置权限插件: ```yaml # config.yaml 添加 auth: htpasswd: file: ./htpasswd packages: '@mycompany/*': access: $authenticated # 限制访问 ``` 3. 定期备份存储目录(默认 `~/.local/share/verdaccio/storage`) > **代理公有包原理**:当请求的包不存在时,Verdaccio 会从配置的 `uplinks`(如 npmjs)下载并缓存到本地,后续请求直接使用缓存[^1][^3]。 #### 6. 企业级方案 若需更高性能和企业级功能(如 HA 集群、LDAP 集成),可考虑: - **Nexus Repository**(Java 生态) - **GitLab Package Registry**(与 GitLab CI/CD 集成) - **JFrog Artifactory**(支持多语言包管理)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值