cnpmjs 是企業私有 npm 服務的解決方案,在其 Github Wiki 中給出了若干快速搭建該倉庫並進行配置的方法。
這套筆記僅是筆者爲了解決安裝本身的 npm 庫 這一問題而使用的方案,對於企業內部緩存的內容不作解釋。
以前曾經嘗試過 sinopia 和 git+ssh
的方案,前者由於項目最後更新爲 2 年前,不敢用(並且你是 build failing
好嗎),後者在 @Azard 的使用中發現會遇到 npm 調用 git 的權限問題,十分難以解決。node
cnpmjs 支持 MySQL,Postgres,SQLite,Mariadb 這一系列的關係型數據庫。在快速部署當中,僅須要準備 node.js 環境。cnpmjs 會使用默認的 sqlite 數據庫存儲信息並啓動。git
$ nohup cnpmjs.org start --admins='myname,othername' --scopes='@my-company-name,@other-name' &
這種依靠一條命令進行配置的方法輕便但不利於維護。尤爲會在下面提到的經過修改 config 文件的內容,在此命令運行下 cnpmjs 不適用github
從源碼部署當中說起了編輯本身的配置文件 config/config.js
,請不要修改原有的 config/index.js
在服務啓動以後,於 ~/.cnpmjs.org/
下會有 logs
文件夾出現,能夠進入查看服務器啓動狀態,同時能夠建立 ~/.cnpmjs.org/config.js
,其效果等同於上面本身的配置文件,會覆蓋默認配置。web
須要修改的配置主要有:(參考自 CNPM 配置指南【實戰填坑】)sql
$ sudo vi $HOME/.cnpmjs.org/config.json { "database": { "db":"cnpmjs", "dialect":"mysql", "host": "localhost", "port": 3306, "username": "root", "password": "yourpassword", "pool": { "maxConnections": 10, "minConnections": 0, "maxIdleTime": 30000 } }, "enablePrivate": true, "syncModel": "none", "bindingHost":"0.0.0.0", "admins": { "sanzhi": "i@sanzhi.me", }, "scopes": ["@company"], "registryHost":"npm.sanzhi.me", "alwaysAuth":false }
部署過程當中可能出現的問題:數據庫
bindingHost
admins
registryHost
scopes
都是重要的配置項,其中npm
bindingHost
默認在127.0.0.1
不配置沒法遠程訪問admins
決定了能夠發包的用戶(接下來會提到)scopes
是企業內部包的名稱,聽說不能發不帶scopes的包(未驗證)registryHost
是以後用戶下載包內容的地址。十分重要。默認爲 cnpmjs 官方。若是沒有域名,請填寫 xxx.xxx.xxx.xxx:7001 的格式部署成功以能夠訪問 7002 端口的 web 頁面爲判別條件。json
發包在進入你須要發的項目文件夾後就兩個命令。
一個是要確保你在私有倉庫的登陸狀態,經過 npm set registry http://xxx.xxx.xxx.xxx:7001
預先設置 npm 的註冊地址爲你的私有倉庫。http://
不能忘了,不然就會發現登陸的時候卡在那裏,過了一分多鐘纔有反應。登陸使用 npm adduser
, npm login
都可。以後會輸入以下信息緩存
Username:sanzhi Password:******** E-Mail(This is public):i@sanzhi.me
第一次登陸視同註冊,以後你就處於私有倉庫的登陸狀態,可使用 npm publish
發包。發好了以後去私有倉庫的 web 頁面就能夠搜到,默認 web 頁面在 7002 端口
在確認 registry 被設置好後,使用 npm install @company/packagename
進行拉取。若是服務器沒有另外設定包的訪問權限,則無需登陸。
在這個過程當中,npm 會先訪問 http://xxx.xxx.xxx.xxx/7001/@company/packagename
獲取 json 信息,在該信息裏的 version.xxx.dist.tarball
中存着某個版本的下載地址。這個地址的前綴即上面的 registryHost
。
cnpmjs 是以面向業界爲主流的開源框架,其配置文檔(即 wiki )很是具備功利性而缺乏詳細的配置項解說,這與其強大多樣的功能不對等,且過期或存在少量問題的文檔居多,在複製粘貼配置的過程當中務必當心而不要貪圖 5 分鐘快速配置。關於 scope 的選項還沒有驗證是否能夠將該選項去掉。