Node.js 如何通知用户NPM包版本更新?

Node.js 如何通知用户NPM包版本更新?,node.js,npm,command-line-interface,npm-install,versioning,Node.js,Npm,Command Line Interface,Npm Install,Versioning,我已经在Node JS中编写了一个CLI工具,并发布到。每次在终端上运行时,我都需要通知用户可用的新版本及其类型(补丁| minor | major),以便用户可以相应地更新它。我如何实现这一点 此外,是否可以询问用户是否希望软件包自行更新 A new version of Rapid React is available. Would you like to update it now?(Y\n) 版本更新检查: 我建议使用,但奇怪的是,它不起作用。所以,我选择了自己处理这项工作 可以轻松检

我已经在Node JS中编写了一个CLI工具,并发布到。每次在终端上运行时,我都需要通知用户可用的新版本及其类型(补丁| minor | major),以便用户可以相应地更新它。我如何实现这一点

此外,是否可以询问用户是否希望软件包自行更新

A new version of Rapid React is available. Would you like to update it now?(Y\n)
版本更新检查: 我建议使用,但奇怪的是,它不起作用。所以,我选择了自己处理这项工作

可以轻松检查最新版本,使用该版本可以从npm注册表获取包的元数据。或者也可以在引擎盖下使用包json

import boxen from 'boxen';
import chalk from 'chalk';
import semver from 'semver';
import pkgJson from 'package-json';
import semverDiff from 'semver-diff';

import { capitalizeFirstLetter } from '../utils';

import { name, version } from '../../package.json';

const checkUpdate = async () => {
  const { version: latestVersion } = await pkgJson(name);

  // check if local package version is less than the remote version
  const updateAvailable = semver.lt(version, latestVersion as string);

  if (updateAvailable) {
    let updateType = '';

    // check the type of version difference which is usually patch, minor, major etc.
    let verDiff = semverDiff(version, latestVersion as string);

    if (verDiff) {
      updateType = capitalizeFirstLetter(verDiff);
    }

    const msg = {
      updateAvailable: `${updateType} update available ${chalk.dim(version)} → ${chalk.green(latestVersion)}`,
      runUpdate: `Run ${chalk.cyan(`npm i -g ${name}`)} to update`,
    };

    // notify the user about the available udpate
    console.log(boxen(`${msg.updateAvailable}\n${msg.runUpdate}`, {
      margin: 1,
      padding: 1,
      align: 'center',
    }));
  }
};
更新通知: 每次工具运行时,如果有更新可用,用户都会看到这样的通知

版本更新检查: 我建议使用,但奇怪的是,它不起作用。所以,我选择了自己处理这项工作

可以轻松检查最新版本,使用该版本可以从npm注册表获取包的元数据。或者也可以在引擎盖下使用包json

import boxen from 'boxen';
import chalk from 'chalk';
import semver from 'semver';
import pkgJson from 'package-json';
import semverDiff from 'semver-diff';

import { capitalizeFirstLetter } from '../utils';

import { name, version } from '../../package.json';

const checkUpdate = async () => {
  const { version: latestVersion } = await pkgJson(name);

  // check if local package version is less than the remote version
  const updateAvailable = semver.lt(version, latestVersion as string);

  if (updateAvailable) {
    let updateType = '';

    // check the type of version difference which is usually patch, minor, major etc.
    let verDiff = semverDiff(version, latestVersion as string);

    if (verDiff) {
      updateType = capitalizeFirstLetter(verDiff);
    }

    const msg = {
      updateAvailable: `${updateType} update available ${chalk.dim(version)} → ${chalk.green(latestVersion)}`,
      runUpdate: `Run ${chalk.cyan(`npm i -g ${name}`)} to update`,
    };

    // notify the user about the available udpate
    console.log(boxen(`${msg.updateAvailable}\n${msg.runUpdate}`, {
      margin: 1,
      padding: 1,
      align: 'center',
    }));
  }
};
更新通知: 每次工具运行时,如果有更新可用,用户都会看到这样的通知