[TOC]
背景: 為了逼格的提升。簡單的囉嗦一下,可忽略。
- 目前我們團隊中的多個專案是同時進行開發的,每個專案中元件都有非常高可複用型。當遇到之前某一塊的業務場景需要進行升級的時候,為了減少去每一個專案中修改大量程式碼的時間,我們只需要在私有的cnpm廠庫修改一次,然後依次在每個專案中npm update對應的包,問題就解決了。
- 方便檢視團隊中有多少元件以及元件如何使用,讓每個成員有了提取元件動力,促進團隊快速成長。
- 開發過程中不乏遇到趕工期,偏偏這個時候又遇到複雜的業務。在此之前是先把之前做的專案程式碼閱讀一邊,在把關鍵程式碼複製過來,進行除錯。恰巧程式碼不是自己寫得。又要可能花費一部分時間去閱讀以下程式碼邏輯。我的天呀!是不是小半天過去了,還能不能愉快的吃雞了。
一、部署方式
- 私有npm部署方式
- 選擇cnpm原因
- cnpm中服務端通過koa框架進行開發,方便後續檢視原始碼。
- 支援 msyql,資料遷移方便,
- 國內cnpm團隊開發,遇到問題方便查詢。
二、前期準備
三、cnpm安裝
- 下載cnpmjs
#clone from github $ git clone git://github.com/cnpm/cnpmjs.org.git $ cd cnpmjs.org #create mysql tables,在cnpm 目中進行啟動mysql $mysql -u root -p mysql> create database cnpmjs mysql> use cnpmjs; mysql> source docs/db.sql 複製程式碼
- 修改配置檔案
- 為防止誤操作建議不要修改config/index.js。我們在config目錄下新建index.js
$ vim config/config.js 複製程式碼
module.exports = { debug: false, database: { db: 'cnpmjs', // 資料庫名,預設為cnpmjs_test host: '127.0.0.1', // 伺服器地址 port: 3306, // 埠 username: 'root', // 使用者名稱, password: '123456', // 對於cento或ubuntu如果用root使用者名稱連線資料庫,這裡請設定密碼為空.非root請正常填寫 dialect: 'mysql' // 使用mysql,預設為sqlite, 還支援postgres,mariadb,暫時不支援oracle }, admins: { admin: 'admin@cnpmjs.org' // 管理員許可權 }, scopes: ['@vt'], // 私有包必須依附於 scope 下 registryHost: '127.0.0.1:7001', //替換伺服器ip bindingHost: '0.0.0.0' }; 複製程式碼
3.啟動服務
- window使用者
#cnpmjs.org目錄中啟動 node diapatch.js 複製程式碼
- 非window通過
asdfnpm start npm restart npm stop 複製程式碼
四、cnpm包的釋出
```
nrm add local http://127.0.0.1:7001/
nrm use local
nrm ls
npm login
npm publish
# 檢視包的詳細資訊
npm info
#新建一個專案進行下載
npm install @vt/zhangle
```
複製程式碼
五、爬坑祕籍
- 建議使用 git clone git://github.com/cnpm/cnpmjs.org.git 不建議使用全域性安裝 通過npm install cnpmjs.org進行安裝的,需要找到全域性安裝cnpmjs.org位置( /root/.nvm/versions/node/v10.15.3/lib/node_modules/cnpmjs.org) ,修改config/config.js 通過cnpmjs.org start
- cnpm 7002 可以正常訪問,7001埠訪問失敗.這種情況最大可能是沒有連線資料庫.
- 啟動過程出現問題絕大多數都是config/index.js配置問題.
- 阿里雲外部想要訪問需要做以下處理安全策略埠7001和7002是否對外開放.
- navicate不能連線mysql資料庫
```
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
mysql>FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
```
複製程式碼
- 如果用sqlite3不能訪問7001,需要node ./models/init_script.js sqlite 進行初始化
後續
- 沒有npm列表,只能通過搜尋後續補充,需要進行優化介面
- 目前還沒有元件開發的規範文件.
- 服務端docker部署未完成