Linux系统使用Cnpm搭建个人Npm镜像仓库

6 篇文章 0 订阅
5 篇文章 0 订阅

npm 作为一种包管理工具,无论你是泛前端还是大前端都已经离不开它。其中在实际开发时,会有很多自定义组件或常用组件,可以放置在npm私服仓库中,以供可以重复使用及集中管理

1. Node

1.1. 下载

下载地址:https://nodejs.org/zh-cn/download/releases/

个人下的10版本Node.js

1.2. 配置

  1. 使用FileZilla将文件上传至服务器
  2. 执行解压命令并修改文件名:
 tar -xvf node-v10.23.2-linux-x64.tar.xz
 mv node-v10.23.2-linux-x64 node
  1. 建立软连接:
ln -s /root/NodeRepository/node/bin/npm /usr/bin/
ln -s /root/NodeRepository/node/bin/node /usr/bin/ 
  1. 执行node -v, npm -v 测试

2. GIt

2.1. 安装

  • linux有两种方式:yum和编译源码,个人使用的是yum,毕竟操作简单
  • 执行命令yum -y install git,完成后执行git --version查看是否成功。
  • 默认yum安装git是安装在目录/usr/libexec/git-core

3. Mysql

3.1.安装配置

安装教程参考文章:Linux系统安装MySql8教程

3.2. 创建数据库

使用Navicat新建数据库cnpmjs(名称自定义,需与Cnpm.org配置文件中的数据库名一致)
个人使用Navcat连接创建,如图:
Navcat

3.3. 导入数据

使用Navcat,选中cnpmjs运行sql文件,sql文件由Cnpm.org提供。
地址:db.sql
导入后如图:
Mysql Tables

注意
建议新建一个用户,权限和root用户一致。因为root默认加密方式为caching_sha2_password,需修改为mysql_native_password,否则当启动cnpm服务时会报异常。

4. Cnpm.org

4.1. 拷贝项目

执行命令:

git clone https://github.com/cnpm/cnpmjs.org.git

4.2. 配置

使用cd命令定位到cnpmjs.org目录,执行

vim /cnpmjs.org/config/index.js

修改的部分,其他保持默认即可,未详细了解其他配置的作用:

	 /**
	 *注释此行,因为此行只允许本地访问,如果是放在服务器,就访问不了了
	 */
	// bindingHost: '127.0.0.1',
	 
	 /**
	 *添加管理员邮箱
	 */
  admins: {
    // name: email
    //fengmk2: 'fengmk2@gmail.com',
    admin: 'xxxxxxxxx@qq.com',
   //dead_horse: 'dead_horse@qq.com',
  },

 /**
 *关于数据库的配置
 * db:与mysql步骤中新建的数据库名对应
 * username: 数据库登录的用户名,Mysql默认为root
 * passowrd: 数据库登录密码
 * dialect: 数据库类型,默认为sqlite,根据个人需要修改
 * 其他默认或根据需要修改
 */
 database: {
    db: 'cnpmjs',
    username: '*****',
    password: '******',

    // the sql dialect of the database
    // - currently supported: 'mysql', 'sqlite', 'postgres', 'mariadb'
    dialect: 'mysql',

    // custom host; default: 127.0.0.1
    host: '127.0.0.1',

    // custom port; default: 3306
    port: 3306,
 /**
 *默认值为‘r.cnpmjs.org’
 * 修改为本地IP地址:7001后,其他机器可访问`http://ip:7001`
 */
 // registry url name default:r.cnomjs.org
  registryHost: '47.94.159.215:7001',

 /**
 *是否为私有模式,私有默认只有管理员才可推送,其他只有同步权限。默认为false
 */
enablePrivate: true,
 /**
 * 只允许带有以下前缀的包才能被支持操作,如`@huchx`
 */
   scopes: [ '@cnpm', '@cnpmtest', '@cnpm-test' ],

4.3. 运行

  1. 运行npm i --verbose安装依赖,--verbose是为了显示详细日志。
  2. 执行node dispatch.js运行服务,注意:必须实在cnpmjs.org根目录下运行,
    日志如图:
    node dispatch.js
    当出现Server started时,即为启动成功。

注意

  1. 关于cnpmjs服务启动时出现了很多异常,有配置错误、数据库错误、插件错误等,未及时记录,所以未记录错误是在哪一步出现的。如出现异常,参考6.错误整理
  2. 个人使用的阿里云,需要在安全组中添加允许访问7001/7002接口

4.4. 访问

使用其他机器访问http://ip:7001,ip为服务器的ip,如图:
7001
访问http://ip:7002,如图:
7002

5 发布

5.1. 切换镜像地址

执行命令
shell npm config set registry=http:ip:7001
将镜像地址切换为自己的地址

5.2. 添加用户

执行命令:
```shell
npm adduser 
Username: admin
Password: 自定义密码
Email: `4.2配置`中admins中admin的邮箱地址
```
>注意:由于`4.2配置`中设置了仅管理员可发布,所以`username`和`email`要和配置中的字段值一致

5.3. 登录

执行命令

npm login
usernameUsername: 与`5.1.添加用户`字段保持一致 
Password:	与`5.1.添加用户`字段保持一致
Email:	与`5.1.添加用户`字段保持一致

5.4. 编译

> 关于npm项目package.json配置暂未整理文章

使用angular `ng`命令编译后报异常:`node --eval "console.error('ERROR: Trying to publish a package that has been compiled by Ivy. This is not allowed.\nPlease delete and rebuild the package, without compiling with Ivy, before attempting to publish.\n')" && exit 1`
错误原因:编译使用了Ivy,未懂Ivy是什么
解决方案:编译使用`--prod`参数,如`ng build xxxName --prod`

5.6. 发布

执行npm publish发布。

注意:发布后只能设置依赖包版本过时,不可删除。但是可以考虑删除服务器数据库cnpmjs(关于cnpmjs存储数据的库)

6. 错误整理

  1. Unhandled rejection SequelizeConnectionError: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server
    错误原因:这个错误应该是发生在node dispatch.js时。原因时mysql root用户默认的加密方式为caching_sha2_password,需要修改为mysql_native_password
    解决方案:将用户的加密方式修改为mysql_native_password,执行命令,其中nowadmin为自己的用户名

    ALTER USER `nowadmin`@`localhost` IDENTIFIED WITH mysql_native_password;
    

    个人使用的方式是使用Navcat新增用户,其插件为mysql_native_password,权限与root保持一致,然后cnpmjs.org和数据库连接使用的都是新增的数据.如图:
    admin
    在这里插入图片描述

  2. g++: command not found的解决
    错误原因:未安装g++插件
    解决方案: 执行命令

    	yum -y update gcc
    	yum -y install gcc+ gcc-c++
    

执行完成后重新启动服务。

  1. ERR! sqlite3@5.0.0 install: node-pre-gyp install --fallback-to-build
    错误原因:未安装node-pre-gyp插件
    解决方案: 执行命令npm install -g node-gyp,如果需要,可以再执行npm i sqlite -s

  2. Linux npm install 装包时提示Error EACCES permission denied
    错误原因:没有权限
    解决方案:执行sudo nom i --verbose

  3. ln -s Too many levels of symbolic links
    错误原因:链接目录层次或链接数太多
    解决方案:删除全部全部链接,退出服务器连接重新连接,然后进行软连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值