从 npmjs 服务器检查版本是否有更新,如果有更新则提示更新
从 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`)