1. 程式人生 > 實用技巧 >從 npmjs 伺服器檢查版本是否有更新,如果有更新則提示更新

從 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`)