// 比对版本 const type = updater.diffType(opts.pkg.version, lastVersion, opts.level); if (type) { // 根据模板渲染提示信息 const str = updater.template(opts.updateMessage || updater.defaultOpts.updateMessage)({ 'colors': updater.colors, 'name': opts.pkg.name, 'current': opts.pkg.version, 'latest': opts.lastVersion, 'command': 'npm i -g ' + opts.pkg.name }); // 进行提示 console.log( updater.boxen(str, { 'padding': 1, 'margin': 1, 'borderStyle': 'classic' }) ); }
强制升级
对于 npm 模块来说,版本 a.b.c 的更新一般有三种情况:
patch:c 位,小版本更新,一般是 bug 修复
minor:b 位,中版本更新,一般增加新功能、bug 修复
major,a 位,大版本更新,一般是不兼容的升级
我们希望当远程版本的更新如果是 major 形式,命令行工具将直接退出,强制用户进行升级后才能使用。这可以保证我们推送一个大版本后,所有的用户都能够马上更新掉,而不是继续使用老版本,造成版本碎片的问题。
实现代码大致如下:
// 比对版本 const type = updater.diffType(opts.pkg.version, lastVersion, opts.level); if (type) { // 根据模板渲染提示信息 const str = updater.template(opts.updateMessage || updater.defaultOpts.updateMessage)({ 'colors': updater.colors, 'name': opts.pkg.name, 'current': opts.pkg.version, 'latest': opts.lastVersion, 'command': 'npm i -g ' + opts.pkg.name }); // 进行提示 console.log( updater.boxen(str, { 'padding': 1, 'margin': 1, 'borderStyle': 'classic' }) ); // 不兼容的更新,直接让进程退出 if (type == 'incompatible') { process.exit(1); } }
总结
命令行检查更新看似简单,其实仔细思考,还是有很多细节。希望这篇文章对你有所启发。
您可能感兴趣的文章: