下面通過三種方法來搭建公司私有npm倉庫,每種方式都有自己的優勢。
Node.js >= 6.11.3,我的Node版本:node v8.2.1
Linux or OSX,我的系統版本:CentOS Linux release 7.2.1511 (Core)
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
是無法更新私有模組,想更新只能重新安裝一次。好處是不用搭建服務。