搭建 Private NPM

1,587 阅读1分钟

在Mac上完成了搭建流程,Windows可能稍有不同。

目前来说NPM生态事实上完成了前端模块化系统的必要准备,因此如果你厂的业务会有Private的需求,这个Point会有两个方案给你选择:

  • 基于cnpmjs.org搭建
  • 直接购买npm company服务,一个人/一个月/7美金

其实在Github上还有另外一个方案:【sinopia】,只是这个库已经不在维护,也就放弃了选择这个方案。

吐槽一下cnpmjs.org的Getting Start,《Deploy a private npm registry in 5 minutes》使用的是sqlite3,而exampless使用的是mysql,印证一些思考时,走了些弯路。(建议:统一起来会比较好)

创建一个项目:

1
2
3
$ mkdir web-private-npm && cd web-private-npm
$ npm init -y
$ npm i cnpmjs.org --save

安装mysql:

1
2
3
4
$ brew install mysql
$ mysql.server start
$ mysql -uroot
$ mysql > show databases;

本地mysql可以不设置root密码,免得忘记。

创建config.js和index.js:

1
2
$ touch config.js
$ touch index.js

docs 目录中有db.sql文件,用于创建表字段,最好copy到你的项目中,因为cnpmjs.org包中的db.sql是个空文件。

创建数据库和表字段:

1
2
3
$ mysql -uroot -e 'CREATE DATABASE private_npm'
$ mysql -uroot 'private_npm' < ./db.sql
$ mysql -uroot -e 'shhow tables;'

通过cnpmjs.org的源码找到了两个start类的函数:

以及cnpmjs.org自己的配置文件。

大部分的时候我们基本就是在学习怎么配置它:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
module.exports = {
admin: {
'icepy': 'xiangwenwe@gmail.com''xiangwenwe@gmail.com''xiangwenwe@gmail.com'
},
database:{
db: 'private_npm',
username: 'root',
password: '',
dialect: 'mysql',
host: '127.0.0.1',
port: 3306,
pool: {
maxConnections: 10,
minConnections: 0,
maxIdleTime: 30000
}
},
registryHost:'localhost:7001',
scopes:['@icepy']
}

然后我们可以使用这两个函数来启动cnpmjs.org:

1
2
3
4
5
const cnpm = require('cnpmjs.org');
const config = require('./config');

cnpm.startWorker(config);
cnpm.startSync(config);
1
2
$ node index.js
[Sat Jun 02 2018 13:21:59 GMT+0800 (CST)] [worker:2888] Server started, registry server listen at 127.0.0.1:7001, web listen at 127.0.0.1:7002, cluster: false

演示

偷懒的给大家演示一下,正式环境不要像我这样。

1
$ vim ~/.npmrc

直接在.npmrc 中配置 registry=http://localhost:7001/

登录本地的npm:

1
$ npm login

用户名和邮箱输入在config.js文件中配置好的,密码随便填。

创建一个项目:

1
2
3
$ mkdir test && cd test
$ npm init -y
$ touch index.js

将package.json文件中的name修改为@icepy/test

上传:

1
$ npm publish

安装:

1
2
3
$ mkdir test1 && cd test1
$ npm init -y
$ npm i @icepy/test --save