CNPM搭建私有的NPM服务

CNPM搭建私有的NPM服务,第1张

记录一下自己使用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
注释掉 bindingHost: ‘127.0.0.1’enableCompress: true, 设为true修改数据库配置
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

![在这里插入图片描述](http://www.kaotop.com/file/tupian/20220526/d063e6d98ed7419f96487f19713d30fc.png

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

npm publish

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

"name" : @zzy/xxxxxxx

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

遇到的问题:


registryHost: ‘127.0.0.1:7001’,一定要配置自己的服务器 IP ,不能用默认的配置

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1320156.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-11
下一篇 2022-06-11

发表评论

登录后才能评论

评论列表(0条)

保存