NPM作為前端最cool及最爛的包管理器,它解決困擾前端工程化發展中代碼模塊管理的大問題。但是隨着業務需求的發展,我們的代碼從以前的單項目復用,延伸出了多項目復用的需求。本來項目之間代碼復用管理的情景是醬紫的:
小諸:誒,你那邊功能A實現了沒有?
小文:實現了,在XXX項目里的aaa.js,你拷貝復制到你項目了就行。
小諸:我靠,你寫的代碼有毒,有bug,坑爹,你更新一下吧
小文:OK,XXX項目沒有觸發這個bug,XXX2里有用到,你git拉一下重新拷貝一遍吧
小諸:...
這種管理模式較為混亂,而實際上NPM的出生也是為了解決這個問題,有一個統一的管理源去管理所有的代碼模塊。但是npm publish后的代碼是開源的,而公司部分業務組件並不適合去做開源。所以私有的NPM就很有必要了。
而在私有npm中阿里的cnpm功能是最強大的,我當然選擇用這個。然后最近剛好部署了一台docker服務器,相信很容易就可以部署好。
在Docker Hub上找到了hbrls/cnpmjs這個鏡像
$ docker pull hbrls/cnpm:0.0.5
$ docker run -d \
-p 7001:7001 \
-p 7002:7002 \
-v /path/to/config:/var/app/cnpmjs.org/config \
-v /path/to/customize/README.md:/var/app/cnpmjs.org/docs/web/readme.md \
-v /path/to/storage:/var/www \
--name cnpm hbrls/cnpm:0.0.5
直接依照他的默認配置做好了,懶得改了。。。但是發現莫名報了錯
-v /path/to/customize/README.md:/var/app/cnpmjs.org/docs/web/readme.md 文件映射的時候一直報錯,不得其道,也木有解決方案,阿西巴!
當然我之前為了方便管理裝了一個shipyard去管理docker(萬萬沒想到給未來留下了坑)
PS:后來發現readme.md映射報錯是因為我沒有提前把readme.md放到host的文件夾中,導致自動建了一個叫做README.MD的文件夾,ORZ。。。。
最后我去cnpm項目中把默認的配置和readme.md拉下來放到host中config文件夾下面的配置文件文件名一定要是index.js,另外記得需要把index.js中bindingHost字段從127.0.0.1修改為0.0.0.0才能直接外網訪問,懶得用nginx做代理了,麻煩。
然后我就遇到了因為shipyard帶來的坑,docker下安裝了shipyard后默認占用了7001端口,萬萬沒想到能這么湊巧,后來用docker ps檢查了端口才發現,直接映射為7003好了。
OK,跑起來了。
之前躺在坑里沒跑出來的時候想着不用cnpm,直接弄個npm好了,還在docker上搭了一個sinopia,這個配置就相對簡單了,當然功能也沒有cnpm強大,不過好在簡單實用滿足需求。這個部署挺簡單沒啥坑,我就不多BB了
by panwk
