从 npmjs 服务器检查版本是否有更新,如果有更新则提示更新

从 npmjs 检查依赖版本

  • 如果要通过命令行查看, 可以通过 npm view mockm versions 的形式

本文通过 npmjs api 以编程方式获取到服务器上的版本, 再与本地版本进行比较以提示更新.

优先以 node 自身的 request 查询方式进行查询, 如果不存在, 再查询全局.

可直接使用的源码:
这段代码来自一款很好用的前后端接口联调工具 mockm:

/**
* 从 npmjs 检查依赖版本
* @param {*} name 要检查更新的依赖名称
* @param {object} param1 参数
* @param {string} param1.version 指定版本
* @param {array} param1.packagePath 指定路径
*/
async function checkUpdate(name, {version, packagePath} = {}) {
  function hasFile(filePath) { // 判断文件或目录是否存在
    const fs = require(`fs`)
    return fs.existsSync(filePath)
  }
  function getLocalVersion(name) { // 从本地获取版本号
    packagePath = packagePath || require.main.paths.concat(`${require(`path`).parse(process.execPath).dir}/node_modules`) // 全局安装目录
      .find(path => hasFile(`${path}/${name}/package.json`))
    console.log(`packagePath`, packagePath)
    if(packagePath) {
      return require(`${packagePath}/${name}/package.json`).version // 从 package 中获取版本
    }
  }
  function getServerVersion(name) { // 从 npmjs 中获取版本号
    return new Promise((resolve, reject) => {
      const https = require('https');
      https.get(`https://registry.npmjs.org/${name}`, res => {
          let data = ''
          res.on('data', chunk => {
            data += chunk
          })
          res.on('end', () => {
            const latest = (JSON.parse(data)[`dist-tags`] || {}).latest // 获取最新版本
            resolve(latest)
          })
      }).on(`error`, (err) => {
        throw new Error(err.message)
      })
    })
  }
  const getLocalVersionRes = version || getLocalVersion(name)
  const getServerVersionRes = await getServerVersion(name)
  if(getLocalVersionRes !== getServerVersionRes) {
    console.log(`${name} 已发布新版本 ${getServerVersionRes}, 你当前版本为 ${getLocalVersionRes}`)
  }
}
// 使用示例:
checkUpdate(`mockm`)
原文地址:https://www.cnblogs.com/daysme/p/14087070.html