无名商城论坛

搜索
查看: 238|回复: 0

[其他技术] 【WD】小项目中管理npm包版本的思路与方法

[复制链接]

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
32464
发表于 2022-5-8 15:33:29 | 显示全部楼层 |阅读模式


有一些项目没有类似jenkins的自动部署平台,前端部署都是本地执行npm run build命令生成压缩包,然后放到服务器上面,解压到nginx 目录, 但是有的时候遇到一个问题,比如项目中某个成员升级了其他组写的一个组件packageA,但是其他成员可能没有升级,导致上线后就会有一些问题,一个包还好,如果有好几个包都没有升级,那么可能导致一些意想不到的问题。——————————————————————思路:首先就这个问题,我思考后有以下几个问题package.json中的包名的版本有几个是用的^x.x.x的形式,不利于判断如何对比包的版本————————————————————解决问题1针对第一个问题解决方案就是 直接用x.x.x的方式,一个包的更新必定是至少有一个人知道这个事情才会去更新包,所以包名是可以不带任何标识的问题2针对第二个问题node_modules中的版本是低的,但是package.json的版本是最新的,所以我们可以自定一个脚本判断两个版本是否一致const path = require('path');const projectRoot = process.cwd();const projectPack = require(path.resolve(projectRoot, 'package.json'));// 需要对比的包名const modules = ['element-ui'];const allDependencies = {  ...(projectPack.dependencies || {}),  ...(projectPack.devDependencies || {}),};modules.forEach(module => {  try {    const packVersion = allDependencies[module];    // 有一些包名是有文件夹的比如@vue/cli-service,是在@vue文件夹下    const realPath = packVersion.aplit('/');    const pack = require(path.resolve(      ...[projectRoot, 'node_modules', ...realPath, 'package.json'],    ));    const needVersions = packVersion.match(/\d+/g);    const realVersions = pack.version.match(/\d+/g);    for (const i in needVersions) {      if (        isDef(needVersions) &&        isDef(realVersions) &&        parseInt(realVersions) < parseInt(needVersions)      ) {        exit(module);      }    }  } catch (error) {    exit(module);  }});function exit(moduleName) {  throw new Error(`${moduleName} 版本过低,请执行 npm i/npm install`);}function isDef(num) {  return num !== null && num !== undefined;}package.json改造 增加check 脚本 "scripts": {    "check": "node build/checkNpmPackageVersion.js",    "dev": "npm run check && vue-cli-service serve",    "build": "npm run check && vue-cli-service build",    "lint": "vue-cli-service lint"  },不足之处:如果包名不是纯数字的话对比有问题,因为我们公司的包名都不带alpha,beta等,所以我没有考虑有一些可以考虑和远程仓库对比,比如调npm info包名命令将结果对比。 ——————————————————————                                           【WD】小鸭鸭[勉强][玫瑰]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表