[TOC]
背景: 为了逼格的提升。简单的啰嗦一下,可忽略。
- 目前我们团队中的多个项目是同时进行开发的,每个项目中组件都有非常高可复用型。当遇到之前某一块的业务场景需要进行升级的时候,为了减少去每一个项目中修改大量代码的时间,我们只需要在私有的cnpm厂库修改一次,然后依次在每个项目中npm update对应的包,问题就解决了。
- 方便查看团队中有多少组件以及组件如何使用,让每个成员有了提取组件动力,促进团队快速成长。
- 开发过程中不乏遇到赶工期,偏偏这个时候又遇到复杂的业务。在此之前是先把之前做的项目代码阅读一边,在把关键代码复制过来,进行调试。恰巧代码不是自己写得。又要可能花费一部分时间去阅读以下代码逻辑。我的天呀!是不是小半天过去了,还能不能愉快的吃鸡了。
一、部署方式
- 私有npm部署方式
- 选择cnpm原因
- cnpm中服务端通过koa框架进行开发,方便后续查看源码。
- 支持 msyql,数据迁移方便,
- 国内cnpm团队开发,遇到问题方便查找。
二、前期准备
三、cnpm安装
- 下载cnpmjs
#clone from github $ git clone git://github.com/cnpm/cnpmjs.org.git $ cd cnpmjs.org #create mysql tables,在cnpm 目中进行启动mysql $mysql -u root -p mysql> create database cnpmjs mysql> use cnpmjs; mysql> source docs/db.sql 复制代码
- 修改配置文件
- 为防止误操作建议不要修改config/index.js。我们在config目录下新建index.js
$ vim config/config.js 复制代码
module.exports = { debug: false, database: { db: 'cnpmjs', // 数据库名,默认为cnpmjs_test host: '127.0.0.1', // 服务器地址 port: 3306, // 端口 username: 'root', // 用户名, password: '123456', // 对于cento或ubuntu如果用root用户名连接数据库,这里请设置密码为空.非root请正常填写 dialect: 'mysql' // 使用mysql,默认为sqlite, 还支持postgres,mariadb,暂时不支持oracle }, admins: { admin: 'admin@cnpmjs.org' // 管理员权限 }, scopes: ['@vt'], // 私有包必须依附于 scope 下 registryHost: '127.0.0.1:7001', //替换服务器ip bindingHost: '0.0.0.0' }; 复制代码
3.启动服务
- window用户
#cnpmjs.org目录中启动 node diapatch.js 复制代码
- 非window通过
asdfnpm start npm restart npm stop 复制代码
四、cnpm包的发布
```
nrm add local http://127.0.0.1:7001/
nrm use local
nrm ls
npm login
npm publish
# 查看包的详细信息
npm info
#新建一个项目进行下载
npm install @vt/zhangle
```
复制代码
五、爬坑秘籍
- 建议使用 git clone git://github.com/cnpm/cnpmjs.org.git 不建议使用全局安装 通过npm install cnpmjs.org进行安装的,需要找到全局安装cnpmjs.org位置( /root/.nvm/versions/node/v10.15.3/lib/node_modules/cnpmjs.org) ,修改config/config.js 通过cnpmjs.org start
- cnpm 7002 可以正常访问,7001端口访问失败.这种情况最大可能是没有连接数据库.
- 启动过程出现问题绝大多数都是config/index.js配置问题.
- 阿里云外部想要访问需要做以下处理安全策略端口7001和7002是否对外开放.
- navicate不能连接mysql数据库
```
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
mysql>FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
```
复制代码
- 如果用sqlite3不能访问7001,需要node ./models/init_script.js sqlite 进行初始化
后续
- 没有npm列表,只能通过搜索后续补充,需要进行优化界面
- 目前还没有组件开发的规范文档.
- 服务端docker部署未完成