为什么要用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的维护者)。