為什么要用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的維護者)。