跳到主要内容
版本号:6.x

Node.js API

Verdaccio 是一个二进制命令,可在全局安装软件包(例如 npm i -g verdaccio)时在环境中使用,但也可以作为项目的依赖项,以编程方式使用。

使用 child_process 模块中的 fork

使用二进制文件是以编程方式使用 verdaccio 的更快方法,您需要在配置文件中添加 _debug: true 以启用消息系统,当 verdaccio 准备就绪时,将发送 verdaccio_started 字符串作为信息,如下例所示。

如果您使用的是 ESM 模块,require 将不可用。

export function runRegistry(args: string[] = [], childOptions: {}): Promise<ChildProcess> {
return new Promise((resolve, reject) => {
const childFork = fork(require.resolve('verdaccio/bin/verdaccio'), args, childOptions);
childFork.on('message', (msg: { verdaccio_started: boolean }) => {
if (msg.verdaccio_started) {
resolve(childFork);
}
});
childFork.on('error', (err: any) => reject([err]));
childFork.on('disconnect', (err: any) => reject([err]));
});
}

您可以在该资源库中查看完整示例。

https://github.com/juanpicado/verdaccio-fork

使用模块 API

该功能在 v5.11.0 及更高版本中可用。

使用 const verdaccio = require('verdaccio'); 由于默认模块未封装,因此已被弃用,建议使用 runServer 以确保将来的兼容性。

有三种使用方法:

  • 无输入,它会自动找到 config.yaml,就像您在控制台中运行 verdaccio 一样。
  • 使用绝对路径。
  • 使用对象(这里有一个问题,见下文)。
    const {runServer} = require('verdaccio');
const app = await runServer(); // default configuration
const app = await runServer('./config/config.yaml');
const app = await runServer({ configuration });
app.listen(4000, (event) => {
// do something
});

使用对象时,您需要手动添加 self_path (这虽不好,但现在更改会造成破坏),在 v6 版本中已不再需要。

const { runServer, parseConfigFile } = require('verdaccio');
const configPath = join(__dirname, './config.yaml');
const c = parseConfigFile(configPath);
// 使用方法
// 在 v5 上,`self_path` 仍然存在,并将在 v6 中删除
c.self_path = 'foo';
runServer(c).then(() => {});

功能在 v5.11.0 之前的次要版本可用。

这是一种有效的方法,但在未来的版本中不推荐。

const fs = require('fs');
const path = require('path');
const verdaccio = require('verdaccio').default;
const YAML = require('js-yaml');

const getConfig = () => {
return YAML.load(fs.readFileSync(path.join(__dirname, 'config.yaml'), 'utf8'));
};

const cache = path.join(__dirname, 'cache');
const config = Object.assign({}, getConfig(), {
self_path: cache,
});

verdaccio(config, 6000, cache, '1.0.0', 'verdaccio', (webServer, addrs, pkgName, pkgVersion) => {
try {
webServer.unref();
webServer.listen(addrs.port || addrs.path, addrs.host, () => {
console.log('verdaccio running');
});
} catch (error) {
console.error(error);
}
});