CNPM搭建私有的NPM仓库

记录一下自己使用CNPM + cnpmjs.org 搭建npm服务器的过程。

“私有 npm 仓库” 有何用

组件化之后,搭建 “私有 npm 仓库” 是个不错选择。

私有 npm 仓库可以让我们使用组件就像 npm 官方仓库里的包一样方便。

一般私有 npm 仓库有以下一些特性:

私有包托管在内部服务器或者单独的服务器上;
可以同步整个官方仓库,也可以只同步需要的;
下载的时候,可以让公共包走公共仓库,私有包走私有仓库;
可以缓存下载过的包;
对于下载,发布,有对应的权限管理。
目前比较好的解决方案有下面几种:

  • Nexus 搭建 npm 私服
  • Sinopia 搭建 npm 私服
  • cnpm 搭建 npm 私服

本文主要讲第三种

下载项目,进入目录

本人将github的仓库clone到gitee上,这样下载比较快。

git clone https://gitee.com/Xu_Yangy/cnpmjs.org.git
cd cnpmjs.org

安装项目依赖

npm i --unsafe-perm=true

用这个命令是因为报错了
有兴趣的可以看下面的文章
https://www.shuzhiduo.com/A/gAJGqe20dZ/

创建MySQL数据库

进入mysql后,检测原来是否含有cnpmjs_test数据库,有的话执行

DROP DATABASE IF EXISTS cnpmjs_test;

创建数据库

CREATE DATABASE cnpmjs_test;

连接新建的数据库,sql语句文件在项目里如下,执行sql语句

> docs/db.sql

查看刚刚创建的表格

在这里插入图片描述

接下来修改配置文件,很重要

vi ./config/index.js
  1. 注释掉 bindingHost: ‘127.0.0.1’
  2. enableCompress: true, 设为true
  3. 修改数据库配置
database: {
    db: 'cnpmjs_test', //改为自己建的数据库名
    username: 'root', // 改为自己的数据库用户名
    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,

    // use pooling in order to reduce db connection overload and to increase speed
    // currently only for mysql and postgresql (since v1.5.0)
    pool: {
      maxConnections: 10,
      minConnections: 0,
      maxIdleTime: 30000
    },

    dialectOptions: {
      // if your server run on full cpu load, please set trace to false
      trace: true,
    },

    // the storage engine for 'sqlite'
    // default store into ~/.cnpmjs.org/data.sqlite
    storage: path.join(dataDir, 'data.sqlite'),

    logging: !!process.env.SQL_DEBUG,
  },

其他配置说明


webPort: 7002,              //展示查询站点访问端口
bindingHost: '127.0.0.1',   //监听绑定的 Host,默认127.0.0.1,如果外网访问注释掉即可,不然只能 127.0.0.1 本地访问


// 设置我们的私服服务器 IP 地址,端口保持原有的7001
// registry url name
// 模块注册列表访问域名,装模块时会到这个域名下查找
registryHost: '127.0.0.1:7001',


/**
 * 数据库设置
 */
database: {
  db: 'cnpmjs', // 数据库名
  username: 'root', // 账号
  password: '123456', // 密码

  // the sql dialect of the database
  // - currently supported: 'mysql', 'sqlite', 'postgres', 'mariadb'
  dialect: 'mysql', // 根据需要选择使用什么数据库,这里改成 mysql

  // custom host; default: 127.0.0.1
  host: '127.0.0.1', // 数据库访问IP
  // custom port; default: 3306
  port: 3306, // 数据库访问端口

  // use pooling in order to reduce db connection overload and to increase speed
  // currently only for mysql and postgresql (since v1.5.0)
  // 缓冲
  pool: {
    maxConnections: 10,
    minConnections: 0,
    maxIdleTime: 30000
  },

},

// package tarball store in local filesystem by default
// 模块文件存储位置,默认将发布的私有模块跟缓存公共模块存储在本地文件系统中,路径~/.cnpmjs.org/nfs 

nfs: require('fs-cnpm')({
    dir: path.join(dataDir, 'nfs')
}),


// 管理员帐号
// name 表示用户名和密码,value 值是邮箱,可以设置添加多个
admins: {
  // name: email
  fengmk2: 'fengmk2@gmail.com',
  admin: 'admin@cnpmjs.org',
  dead_horse: 'dead_horse@qq.com',
  wenjw: 'wenjw@test.com'
}

// 是否允许所有人发布,true表示只有管理员才能发布,其他用户可以同步。false表示任何人
// 不管是 true 和 false 项目还是必须带有私有标示
enablePrivate: false,

// 我们私有包的前缀,带有以下前缀的包才支持操作
scopes: [ '@58', '@lw-test' ]
// 私有模块非 scopes 白名单,各种非以 scope 方式发布的老模块的白名单管理,数组形式维护
privatePackages: [],

// npm 官方 registry 地址,不会直接从这个地址同步模块,但有时会从这里获取模块信息,除非必要请勿更改
officialNpmRegistry: 'https://registry.npmjs.com',
officialNpmReplicate: 'https://replicate.npmjs.com',

//同步模块上游registry地址
sourceNpmRegistry: 'https://registry.npm.taobao.org',

//上游 registry 是否是 cnpm,默认 true
// 如果使用 npm 官方地址作为同步上游,请设置为 false
sourceNpmRegistryIsCNpm: true,

//若安装时模块不存在,是否向源 registry 进行同步,默认true
syncByInstall: true,

// 同步模式选项
// none: 不进行同步,只管理用户上传的私有模块,公共模块直接从上游获取
// exist: 只同步已经存在于数据库的模块
// all: 定时同步所有源 registry 的模块
syncModel: 'exist', // 'none', 'all', 'exist'

// 同步时间间隔,10 分钟
syncInterval: '10m',

// 是否同步模块中 devDependencies,默认 false
syncDevDependencies: false,

// https://github.com/cnpm/cnpmjs.org/issues/1149
// if enable this option, must create module_abbreviated and package_readme table in database
enableAbbreviatedMetadata: true,


启动CNPM服务器(默认会打开两个端口,7001用于NPM的注册服务,7002用于Web访问)

npm start

node dispatch.js

然后在浏览器访问 自己的cnpm的ip:7001 自己的cnpm的ip:7001 如果可以访问则说明访问成功

nrm使用

nrm add cnpmorg http://192.168.10.245:7001/

nrm use cnpmorg

nrm ls

登录

npm login

在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/d063e6d98ed7419f96487f19713d30fc.png

然后我们随便创建一个小项目发布测试一下。测试目录下我们执行发布命令

npm publish

package.json的name一定要用自定义的规则开头

"name" : @zzy/xxxxxxx

在 http://192.168.10.245:7002/ 下,可以搜索到我们刚发布的包。

在这里插入图片描述

遇到的问题:

在这里插入图片描述
registryHost: ‘127.0.0.1:7001’,一定要配置自己的服务器 IP ,不能用默认的配置

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: cnpmnpmNode.js 的包管理工具。 cnpm 是国内的 npm 镜像,因为国内网络的原因,国内开发者使用 cnpm 可以更快的安装和下载包,而不需要等待国外服务器的响应。 但是,cnpmnpm 在安装、更新和卸载包方面并没有什么区别,你可以根据自己的需要来选择使用 cnpmnpm。 总的来说,cnpmnpm 都是可以用来管理 Node.js 依赖的,但 cnpm 更适用于国内开发者。 ### 回答2: cnpm install和npm install是npm的两个命令,用于安装软件包和依赖项。 npm是Node Package Manager(Node包管理器)的缩写,是Node.js官方推荐的包管理工具。它是一个非常流行的社区项目,拥有广泛的软件包和丰富的功能。 cnpm是一个国内镜像站点提供的命令行工具,它是淘宝团队为了解决国内用户使用npm安装软件包时速度慢的问题而开发的。cnpmnpm在功能上并无区别,但cnpm默认使用镜像站点来下载和安装软件包,相对于npm来说更快速。 cnpm install命令与npm install命令一样,都用于安装package.json文件中列出的所有依赖项。不同的是,使用cnpm install命令会从淘宝镜像站点下载软件包,而使用npm install命令会从默认的npm官方源或者自定义的源地址下载软件包。因此,如果在国内使用npm install命令安装软件包时速度很慢,可以尝试使用cnpm install命令来提高速度。 总结而言,cnpm install和npm install的功能是相同的,但cnpm install更快速,适用于国内用户在使用npm安装软件包时速度慢的情况下使用。 ### 回答3: cnpm install 和 npm install 是两个不同的包管理工具的命令。 npm install 是使用 npm (Node Package Manager) 进行包管理的命令。npmNode.js 社区使用最广泛的包管理工具,可以方便地安装、升级、删除和管理 JavaScript 包及其依赖关系。当我们执行 npm install 命令时,它会读取项目根目录下的 package.json 文件,并根据这个文件中的依赖关系列表,从 npm registry(例如 https://registry.npmjs.org/)上下载对应的包到本地。 cnpm install 则是使用 cnpm (China npm) 进行包管理的命令。cnpmnpm 的中国镜像,它通过将 npm 的 registry 切换为国内的 registry(例如 https://registry.npm.taobao.org/),以提高安装包的速度。由于国内网络环境的限制,直接使用 npm install 下载包可能会非常慢,而使用 cnpm install 可以借助国内的镜像服务器,加快包的下载速度。 因此,cnpm install 和 npm install 的本质区别就在于它们使用的包管理工具不同。npm install 需要依赖于 npm 工具,并从 npm registry 下载包;而 cnpm install 则使用 cnpm 工具及国内镜像服务器进行加速下载。在国内使用 cnpm install 可以提高下载速度,但在一些特殊情况下(如发布包时),可能会导致安装失败或出现一些兼容性问题。 总结来说,cnpm install 和 npm install 的区别主要在于使用的包管理工具和下载速度上的差异。根据需求和网络环境的不同,选择合适的命令来进行包的安装和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

对的态度带你走向对的路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值