cnpm 私有服務器搭建

為什么要用cnpm?


主要有兩點:

  • 緩存npm官方包,加快公司內部訪問速度
  • 管理公司內部不愿意公開的私有npm包

獲取項目代碼


至少2017年12月的時候master分支不能使用,希望維護者可以未來修復

git clone git://github.com/cnpm/cnpmjs.org.git
cd cnpmjs.org
git checkout 2.19.4

創建mysql表結構


以下命令,需要安裝mysql,并確保mysql指令在路徑上面

//假設 username是root, 下面指令會提示輸入密碼
$ mysql -u root -p 
//創建一個cnpmjs_test的數據庫,并建表
mysql> create database cnpmjs_test
mysql> use cnpmjs_test
mysql> source docs/db.sql

編輯配置文件


vim config/index.js

enableCluster: true,
database: {
     db: "cnpmjs_test",
     username: "root", 
     password: "root", // 假設mysql的密碼是root
     dialect: "mysql",
     host: "127.0.0.1",
     port: 3306
},
admins: {
     sean: "coolguy@foxmail.com"
},
registryHost: '127.0.0.1:7001',
syncModel: "exist", // 定時同步已經存在于數據庫的包
   

備注:127.0.0.1 需要改成自己的地址

啟動服務


node dispatch.js

這時候就可以打開http://127.0.0.1:7002

使用私有registry下載npm包


在install之前,應該先去http://127.0.0.1:7002 搜索這個包,如果沒有先sync一下,確保私有庫里面有了,再install, 不然會有報錯

sudo npm install cnpm -g
cnpm set registry http://127.0.0.1:7001
cnpm install react 

遇到的一些問題


在syn metro-bundler的時候,description中有emoji的標簽,log出現ER_TRUNCATED_WRONG_VALUE_FOR_FIELD的錯誤。 原因是description的編碼不支持,可以修改編碼到utf8mb4(嘗試了,沒成功), 用了一種過濾的方式。 在package.js 中

description = description.replace(/[\u0800-\uFFFF]/g, '');

如果其他人也遇到這個問題,可以借鑒(當然提了一個issue給alibaba的維護者)。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。