微信号:fed-talk

介绍:公众号开通于2016年,内容起于前端而不止于前端.

搭建 Private NPM

2018-06-02 14:29 icepy


在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,印证一些思考时,走了些弯路。(建议:统一起来会比较好)

创建一个项目:

$ 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类的函数:

  • startWork

  • startSync

以及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




长按二维码关注公众号:

你也可以关注我的新浪微博,搜索i_icepy,很期待和大家交流


 
象尘说 更多文章 Chat推荐:从0到1快速开发钉钉微应用 Go HTTP Go JSON Go 标准库 Go 如何调试你的应用程序
猜您喜欢 GitHub上最受开发者好评的前端UI框架排行 嵌入式领域的职业发展方向是什么? 快来视奸我的翻新博客 如果你对医疗健康信息感兴趣 Mixins 比继承更好