在Mac上完成了搭建流程,Windows可能稍有不同。
目前来说NPM生态事实上完成了前端模块化系统的必要准备,因此如果你厂的业务会有Private的需求,这个Point会有两个方案给你选择:
其实在Github上还有另外一个方案:【sinopia】,只是这个库已经不在维护,也就放弃了选择这个方案。
吐槽一下cnpmjs.org的Getting Start,《Deploy a private npm registry in 5 minutes》使用的是sqlite3,而exampless使用的是mysql,印证一些思考时,走了些弯路。(建议:统一起来会比较好)
创建一个项目:
$ mkdir web-private-npm && cd web-private-npm
$ npm init -y
$ npm i cnpmjs.org --save
安装mysql:
$ brew install mysql
$ mysql.server start
$ mysql -uroot
$ mysql > show databases;
本地mysql可以不设置root密码,免得忘记。
创建config.js和index.js:
$ touch config.js
$ touch index.js
在docs
目录中有db.sql文件,用于创建表字段,最好copy到你的项目中,因为cnpmjs.org包中的db.sql是个空文件。
创建数据库和表字段:
$ mysql -uroot -e 'CREATE DATABASE private_npm'$ mysql -uroot 'private_npm' < ./db.sql
$ mysql -uroot -e 'shhow tables;'
通过cnpmjs.org
的源码找到了两个start
类的函数:
以及cnpmjs.org
自己的配置文件。
大部分的时候我们基本就是在学习怎么配置它:
module.exports = {
admin: { 'icepy': '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:
const cnpm = require('cnpmjs.org');const config = require('./config');cnpm.startWorker(config);cnpm.startSync(config);
$ 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
偷懒的给大家演示一下,正式环境不要像我这样。
$ vim ~/.npmrc
直接在.npmrc
中配置 registry=http://localhost:7001/
登录本地的npm:
$ npm login
用户名和邮箱输入在config.js文件中配置好的,密码随便填。
创建一个项目:
$ mkdir test && cd test$ npm init -y
$ touch index.js
将package.json文件中的name修改为@icepy/test
上传:
$ npm publish
安装:
$ mkdir test1 && cd test1
$ npm init -y
$ npm i @icepy/test --save