记录一下自己使用CNPM + cnpmjs.org 搭建npm服务器的过程。
“私有 npm 仓库” 有何用组件化之后,搭建 “私有 npm 仓库” 是个不错选择。
私有 npm 仓库可以让我们使用组件就像 npm 官方仓库里的包一样方便。
一般私有 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后,检测原来是否含有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 ,不能用默认的配置
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)