企業私有npm部署和實現npm釋出

愛學的樂樂發表於2019-05-02

私有npm部署

[TOC]

背景:  為了逼格的提升。簡單的囉嗦一下,可忽略。

  1. 目前我們團隊中的多個專案是同時進行開發的,每個專案中元件都有非常高可複用型。當遇到之前某一塊的業務場景需要進行升級的時候,為了減少去每一個專案中修改大量程式碼的時間,我們只需要在私有的cnpm廠庫修改一次,然後依次在每個專案中npm update對應的包,問題就解決了。
  2. 方便檢視團隊中有多少元件以及元件如何使用,讓每個成員有了提取元件動力,促進團隊快速成長。
  3. 開發過程中不乏遇到趕工期,偏偏這個時候又遇到複雜的業務。在此之前是先把之前做的專案程式碼閱讀一邊,在把關鍵程式碼複製過來,進行除錯。恰巧程式碼不是自己寫得。又要可能花費一部分時間去閱讀以下程式碼邏輯。我的天呀!是不是小半天過去了,還能不能愉快的吃雞了。

一、部署方式

  • 私有npm部署方式
    1. cnpm
    2. sinopia
    3. verdaccio
  • 選擇cnpm原因
    1. cnpm中服務端通過koa框架進行開發,方便後續檢視原始碼。
    2. 支援 msyql,資料遷移方便,
    3. 國內cnpm團隊開發,遇到問題方便查詢。

二、前期準備

  1. linux環境(mac使用者忽略)
  2. mysql安裝
  3. navicate連線mysql
  4. nrm管理npm源

三、cnpm安裝

  1. 下載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
    複製程式碼
  2. 修改配置檔案
    • 為防止誤操作建議不要修改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通過
    npm start
    npm restart
    npm stop
    複製程式碼
    asdf

四、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部署未完成

參考資料

  1. github cnpm
  2. docker cnpm
  3. sinopia

相關文章