1.安装Node.js:下载、解压、配置环境变量;
2.安装verdaccio:npm install -g verdaccio(命令);
3启动verdaccio:verdaccio(命令);

4.修改配置文件:listen: 0.0.0.0:4873(xml格式)、publish: allow_offline: true(xml格式);
5.服务指向本地:npm set registry http://localhost:4873(命令);
6.注册登录:npm adduser --registry http://localhost:4873(命令)、npm login(命令);
6.开放端口:firewall-cmd --add-port=4873/tcp --permanent(命令);
7.重载防火墙:firewall-cmd --reload(命令);
!!批量publish依赖,将以下代码创建.js文件,放到node_modules文件夹下,node xxx.js执行(注意切换npm源)
zconst fs = require('fs');
const path = require('path');
const process = require('process');
// 导入执行控制台命令的方法
const exec = require('child_process').execSync;
// 保存根路径
const rootPath = __dirname;
let result = fs.readdirSync(rootPath);
const consoleLogPath = path.join(rootPath, 'log');
result.forEach(fName => {
const dPath = path.join(__dirname, fName);
const stat = fs.statSync(dPath);
if (stat.isDirectory()) {
const modulePath = path.join(dPath, 'node_modules');
if (!fs.existsSync(modulePath)) return;
const statModules = fs.statSync(modulePath);
if (statModules.isDirectory()) {
const res = fs.readdirSync(modulePath)
getVersion(res, consoleLogPath, modulePath, fName)
}
}
})
function getVersion(result, logPath, modulePath, fName) {
result.forEach(item => {
// 拼接当前包路径
const dPath = path.join(modulePath, item);
// 获取路径的stat
const stat = fs.statSync(dPath);
// 判断该包路径是否为目录
if (stat.isDirectory()) {
// 如果是目录,则执行下述操作
// 当前包目录下的package.json文件路径
const packageJsonPath = path.join(dPath, 'package.json');
if (fs.existsSync(packageJsonPath)) {
// 读取当前包目录下的package.json文件的内容,返回字符串
const packageJsonContentString = fs.readFileSync(packageJsonPath, 'utf8');
// 解析package.json文件的内容成json格式的对象
const parsedPackJson = JSON.parse(packageJsonContentString);
if (parsedPackJson.scripts && Object.keys(parsedPackJson.scripts).length !== 0) {
parsedPackJson.scripts = {};
fs.writeFileSync(packageJsonPath, JSON.stringify(parsedPackJson));
}
// 把当前的目录切换到当前包路径下
process.chdir(dPath);
// 在包路径下执行cmd控制台命令 npm publish
try {
exec('npm publish');
} catch {
console.log(`包${fName}:${item}已发布`);
}
// 操作执行完成,则把当前路径切换到原来的根目录
process.chdir(rootPath);
console.log(fName, parsedPackJson.name, parsedPackJson.version)
// 如果解析好的json格式的对象存在scripts属性且该属性不为空对象,那么将其内容设置成空对象
fs.appendFileSync(logPath, `${fName} / ${parsedPackJson.name} /@${parsedPackJson.version}\n`);
}
}
})
}
浙公网安备 33010602011771号