基於Docker部署私有npm


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM