小项目中管理npm包版本的思路与方法

 更新时间:2021年06月08日 10:23:49   作者:Vincent就是我65724  
这篇文章主要给大家介绍了关于小项目中该如何管理npm包版本的思路与方法,npm包版本管理是非常重要的,文章通过示例代码介绍的很详细,需要的朋友可以参考下

背景

笔者在最近碰到一个问题:

有一些项目没有类似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[i]) &&
        isDef(realVersions[i]) &&
        parseInt(realVersions[i]) < parseInt(needVersions[i])
      ) {
        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包名命令将结果对比

总结

到此这篇关于小项目中管理npm包版本的思路与方法的文章就介绍到这了,更多相关小项目管理npm包版本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 算法系列15天速成 第八天 线性表【下】

    算法系列15天速成 第八天 线性表【下】

    上一篇跟大家聊过“线性表"顺序存储,通过实验,大家也知道,如果我每次向顺序表的头部插入元素,都会引起痉挛,效率比较低下,第二点我们用顺序存储时,容易受到长度的限制,反之就会造成空间资源的浪费
    2013-11-11
  • 从web到内网渗透的一次过程详解

    从web到内网渗透的一次过程详解

    本文非常详细的描述了一次从web到内网渗透的一次过程,并对每一步过程做了详细的图文示例及解析,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-09-09
  • 游戏开发Unity2D图片任意形状破碎裂片效果展示

    游戏开发Unity2D图片任意形状破碎裂片效果展示

    本篇文章属于游戏开发Unity进阶篇,主要介绍了游戏开发Unity2D图片任意形状破碎裂片效果展示,有需要的朋友可以借鉴参考下,希望可以有所帮助
    2021-09-09
  • WebSocket部署服务器但外网无法连接的解决方法

    WebSocket部署服务器但外网无法连接的解决方法

    WebSocket是html5新增加的一种通信协议,目前流行的浏览器都支持这个协议,例如Chrome,Safari,Firefox,Opera,IE等等,下面这篇文章主要给大家介绍了关于WebSocket部署服务器但外网无法连接的解决方法,需要的朋友可以参考下。
    2017-10-10
  • Git 教程之工作区、暂存区和版本库详解

    Git 教程之工作区、暂存区和版本库详解

    本文主要介绍Git 工作区、暂存区和版本库的知识,这里整理了详细的资料,有需要的小伙伴可以参考下
    2016-09-09
  • Git中恢复已删除分支的几种方法

    Git中恢复已删除分支的几种方法

    这篇文章主要介绍了在Git中恢复已删除分支的几种方法,包括查找提交记录、恢复分支、推送恢复的分支等步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-01-01
  • php asp.net 比较 [推荐]

    php asp.net 比较 [推荐]

    如今当提到 Web 开发时,您有许多选择。这些方法中许多都涉及到预处理 - 即,利用特定的标记将代码嵌入到 HTML 页面中
    2009-06-06
  • 防范SQL注入式攻击

    防范SQL注入式攻击

    SQL注入式攻击是利用是指利用设计上的漏洞,在目标服务器上运行Sql命令以及进行其他方式的攻击动态生成Sql命令时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因。
    2009-07-07
  • 将编码从GB2312转成UTF-8的方法汇总(从前台、程序、数据库)

    将编码从GB2312转成UTF-8的方法汇总(从前台、程序、数据库)

    这篇文章主要介绍了将编码从GB2312转成UTF-8的方法汇总(从前台、程序、数据库),需要的朋友可以参考下
    2015-11-11
  • matlab 生成.bmp格式的文件

    matlab 生成.bmp格式的文件

    这篇文章主要介绍了matlab 生成.bmp格式的文件,本文以大小为M*N的图片为例,说明头文件格式和内容。需要的朋友可以参考下
    2018-10-10

最新评论