zoukankan      html  css  js  c++  java
  • 从 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`)
    
  • 相关阅读:
    【原】 POJ 1308 Is It A Tree? 并查集树结构 解题报告
    终于决定投身Linux怀抱
    Inside the C++ Object Model
    Fedora 下 OpenCV 的安装
    sed 与 awk
    工具链接收藏
    [转] 计算机视觉领域稍微容易中的期刊
    QtCreator开发多文档编辑器(Project 1)
    Fedora 17: Grub Rescue
    做文档类的工作总是让我感到一些烦躁
  • 原文地址:https://www.cnblogs.com/daysme/p/14087070.html
Copyright © 2011-2022 走看看