5分鐘內3種方法搭建企業內部私有npm倉庫

小弟調調™發表於2019-03-03

下面通過三種方法來搭建公司私有npm倉庫,每種方式都有自己的優勢。

Node.js >= 6.11.3,我的Node版本:node v8.2.1
Linux or OSX,我的系統版本:CentOS Linux release 7.2.1511 (Core)

教程歸檔在我的Github中歡迎修正和Star

cnpm搭建

安裝

npm install -g --build-from-source cnpmjs.org cnpm sqlite3
# 如果報錯或者警告通過下面方式安裝
npm install -g --unsafe-perm --verbose --build-from-source cnpmjs.org cnpm sqlite3
複製程式碼

如果安裝不流暢通過下面形式安裝:

npm install -g --build-from-source 
  --registry=https://registry.npm.taobao.org 
  --disturl=https://npm.taobao.org/mirrors/node 
  cnpmjs.org cnpm sqlite3
複製程式碼

如果報警告或者安裝錯誤,請新增引數--unsafe-perm --verbose

啟動並配置服務

管理員:myname,othername
範圍:my-company-name,other-name
預設埠:7001-registry, 7002-web

啟動服務

$ nohup cnpmjs.org start --admins=`myname,othername` 
  --scopes=`@my-company-name,@other-name` &
複製程式碼

設定註冊地址

將cnpm預設註冊地址更改為私有註冊地址

cnpm set registry http://localhost:7001
複製程式碼

登入cnpm

$ cnpm login
Username: myname
Password: ***
Email: (this IS public) test@test.com
複製程式碼

包上傳到私有倉庫

新建專案

$ cd /tmp
$ mkdir helloworld && cd helloworld
$ cnpm init
name: (helloworld) @my-company-name/helloworld
version: (1.0.0)

{
  "name": "@my-company-name/helloworld",
  "version": "1.0.0",
  "description": "my first scoped package",
  "main": "index.js",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "author": "",
  "license": "ISC"
}
複製程式碼

上傳到私有倉庫

$ cnpm publish
+ @my-company-name/helloworld@1.0.0
複製程式碼

檢視預覽包

瀏覽器中預覽

open http://localhost:7002/@my-company-name/helloworld
複製程式碼

使用cnpm預覽

cnpm info
複製程式碼

安裝

所有公共包都可直接使用cnpm安裝

cnpm install hotkeys-js
複製程式碼

通過verdaccio搭建

verdaccio 是一個輕量級的私有npm代理註冊。(sinopia fork)

安裝

# 使用 npm 安裝
npm install -g npm

# 使用 yarn 安裝
yarn global add verdaccio
複製程式碼

啟動服務

verdaccio >> verdaccio.log 2>&1 & # 後臺啟動並寫入日誌

# Verdaccio doesn`t need superuser privileges. Don`t run it under root.
# warn --- config file  - /root/.config/verdaccio/config.yaml
# warn --- http address - http://localhost:4873/ - verdaccio/2.3.6

verdaccio --listen 4000 --config ./config.yaml # 指定配置啟動
複製程式碼

新增使用者/登入

npm adduser --registry  http://localhost:4873
複製程式碼

上傳私有包

npm publish --registry http://localhost:4873
複製程式碼

本地配置註冊地址

npm config list -l # 檢視預設配置
# 將預設地址 https://registry.npmjs.org/ 改成私有地址
npm set registry http://localhost:4873
# 如果您使用HTTPS,請新增適當的CA資訊
#(“null”表示從作業系統獲取CA列表)
$ npm set ca null
複製程式碼

Git倉庫當私有npm

這個方法得益於,npm提供的的豐富安裝方法。通過下面方法安裝:

npm i -S git+ssh://git@git.showgold.cn:npm/hello.git

npm install -S git+ssh://git@github.com:npm/npm.git#v1.0.27
npm install -S git+ssh://git@github.com:npm/npm#semver:^5.0
npm install -S git+https://isaacs@github.com/npm/npm.git
npm install -S git://github.com/npm/npm.git#v1.0.27
複製程式碼

⚠️ 上面安裝需要注意:你的工程一定是在某一個組下面建立,方便管理,在生成你的包的時候package.json中的name一定要帶上範圍

建立一個私有模組

# 假設你建立了一個Git倉庫,先克隆下來
git clone http://git.your-inc.com/companyfe/hello-private.git

# 生成 `package.json` 配置, 注意限定 `@scope` 範圍
npm init --scope=companyfe
# 提交到倉庫
git push origin master
複製程式碼

⚠️ 將得到如下依賴,注意:

name欄位必須限定範圍,一般為 GitLab group 的名字, 例如 @companyfe, 那麼 name 為: @companyfe/hello-private
private 設為 true 防止將私有模組上傳到公網上去,需要手動設定一下。

{
  "name": "@companyfe/hello-private",
  "version": "1.0.1",
  "description": "",
  "main": "index.js",
  "private":true,
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "author": "kenny wang <wowohoo@qq.com> (http://wangchujiang.com)",
  "license": "ISC"
}
複製程式碼

安裝使用私有模組

跟安裝開源的模組一樣, 使用 npm install 安裝依賴即可. 私有模組會安裝在 @scope 的子資料夾中, 例如: node_modules/@companyfe/hello-private.

# 基礎安裝
npm i -S git+ssh://git@git.your-inc.com/companyfe/hello-private.git
# 帶版本資訊的,必須通過 git 打 tag
npm i -S git+ssh://git@git.your-inc.com/companyfe/hello-private.git#v1.2.0
複製程式碼

將得到如下依賴

{
  "name": "helloworld",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "dependencies": {
    "@companyfe/hello-private": "git+ssh://git@git.your-inc.com/companyfe/hello-private.git#v1.2.0"
  },
  "author": "kenny wang <wowohoo@qq.com> (http://wangchujiang.com)",
  "license": "ISC"
}
複製程式碼

使用私有模組

var hello = require(`@companyfe/hello-private`);
複製程式碼

優劣勢

不好的地方是,使用 npm update 是無法更新私有模組,想更新只能重新安裝一次。好處是不用搭建服務。

參考資料

相關文章