從 npmjs 伺服器檢查版本是否有更新,如果有更新則提示更新
阿新 • • 發佈:2020-12-04
從 npmjs 檢查依賴版本
- 如果要通過命令列檢視, 可以通過
npm view mockm versions
的形式
本文通過 npmjs api 以程式設計方式獲取到伺服器上的版本, 再與本地版本進行比較以提示更新.
優先以 node 自身的 request 查詢方式進行查詢, 如果不存在, 再查詢全域性.
- api 示例: http://registry.npmjs.org/mockm
可直接使用的原始碼:
這段程式碼來自一款很好用的前後端介面聯調工具 mockm:
- mockm 文件地址: https://hongqiye.com/doc/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`)