使用cnpmjs.org搭建私有npm库完整教程

这是一篇完整的使用cnpmjs.org搭建企业私有仓库文章。其中有些章节的内容你已操作过了,请忽略!

有关cnpmjs.org的信息看 官方Github

本文是基于Linux服务器进行部署的。
nodejs版本为:v8.9.0
cnpmjs.org版本为:2.19.4
MariaDB数据库版本为:5.5.60

安装nodejs

Linux安装服务的方式很多,这里使用wget方式安装nodejs服务,若wget命令不存在,可以先安装wget:

yum -y install wget

// 切换到根目录
cd / 

// 下载
wget  https://nodejs.org/dist/v8.9.0/node-v8.9.0-linux-x64.tar.xz
// 解压
tar xvf node-v8.9.0-linux-x64.tar.xz
// 修改为简洁的文件夹名称
mv node-v8.9.0-linux-x64 node-v8.9.0

// 设置node&npm为全局可用
ln -s /node-v8.9.0/bin/node /usr/bin/node
ln -s /node-v8.9.0/bin/npm /usr/bin/npm

// 验证nodejs服务是否安装成功
node -v
npm -v

安装mysql mariadb

私有库依赖数据库,这里使用的是mariadb

yum -y install mariadb mariadb-server

// 启动服务
systemctl start mariadb.service
// 设置开机启动
systemctl enable mariadb.service

// 配置,首次运行会提示输入密码,直接回车即可
// 其他按提示进行设置
mysql_secure_installation

安装cnpmjs.org

cnpmjs.org选用目前稳定2.19.4版本

npm i -g cnpmjs.org@2.19.4

安装成功后,安装目录应该是在/node-v8.9.0/libs/node_modules/cnpmjs.org下(如果不是请自行找到安装目录),进去该目录对其进行一些配置修改(配置文件为config/index.js

var config = {
  registryPort: 7001,         // 仓库端口
  webPort: 7002,              // web站点端口
  bindingHost: '0.0.0.0', // 设置为0.0.0.0对外可访问
  
   // 设置管理员
  admins: {
    // name: email
    xxx: 'xxx@xxx.com'
  },
  
  // 配置数据库信息
  database: {
    db: 'cnpmjs',
    username: 'root',
    password: '123456',
    dialect: 'mysql',
    host: '127.0.0.1',
    port: 3306,
  },
  
  // 设置私库命名空间
  scopes: [ '@xxx' ],
}

建数据库并导入sql数据表

/cnpmjs.org目录下登录数据库

mysql -uroot -pxxx  // xxx为你设置的密码

创建数据库并导入sql,注意:名称应与你配置的相同;执行数据库命令别忘记;

create database cnpmjs;
use cnpmjs;

// 导入sql
source docs/db.sql;

运行服务

npm run start

仓库访问地址127.0.0.1:7001;web访问地址127.0.0.1:7002

定制自己的cli客户端

假如定xnpm为cli名称,新建项目发布于npmjs.com上,相关账号自行注册。
新建Github项目,package.json关键配置如下:

{
  "name": "xnpm-cli",
  "version": "1.1.0",
  "description": "xnpm client",
  "main": "bin/xnpm",
  "preferGlobal": true,
  "bin": {
    "vnpm": "./bin/xnpm"
  },
  "keywords": [
    "vnpm"
  ]
}

./bin/xnpm详细脚本(PS:Mac可以直接使用bash配置更简单,该脚本是为了兼容windows)

#!/usr/bin/env node

const os = require("os");
const colors = require('colors');
const child_process = require('child_process')
const params = process.argv.slice(2).join(' ');

const NPM_REGISTRY = "你的仓库地址";
const NODE_DIST = "https://npm.taobao.org/dist";
const HOME = os.homedir();

try {
  child_process.execSync(`npm --registry=${NPM_REGISTRY} --disturl=${NODE_DIST} \
    --userconfig=${HOME}/.xnpmrc --cache=${HOME}/.cache/xnpm  ${params}`, {
      stdio: 'inherit'
  });
} catch (e) {
  console.log('child_process.execSync'.red, e)
}

npm login npm publish后,即可安装我们的客户端了

npm install -g xnpm-cli
// 查看信息
xnpm config ls

至此,xnpm已经完全替代npm了!
发布私有包时记得package.json文件name的设置

{
  name: '@命名空间/test'
}

一样使用xnpm login xnpm publish 进行登录发布操作,xnpm install @命名空间/test进行安装使用!

大功告成!!不当之处欢迎指正。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容