• 了解patchpackage


    假设loadsh有一个bug,影响线上开发,应该怎么办?

    答:三步走。

    1. 在github上提交pull request,修复bug,等待合并
    2. 合并pr后,等待新版本发包
    3. 升级项目中的lodash依赖

    很合理的很规范的一个流程,但是它一个最大的问题就是太慢了。此时可直接上手修改node_modules中的lodash代码,并修复问题!新问题:node_modules未纳入版本管理,在生产环境并没有用。请看流程

    1. 本地修改node_modules/lodash,本地正常运行
    2. 线上npm i loadsh,lodash未被修改,线上运行失败

    此时有一个简单的方案,临时将修复文件纳入工作目录,可以解决这个问题

    1. 本地修改node_modules/lodash,本地正常运行
    2. 将修改文件复制到根目录/patchs/lodash中,纳入版本管理
    3. 线上npm i lodash,并将修改文件再度复制到node_modules/lodash中,线上正常运行

    但此时并不是很智能,且略有小问题,演示如下:

    1. 本地修改node_modules/lodash,本地正常运行
    2. 将修改文件复制到根目录/patchs/lodash中,纳入版本管理
    3. 线上npm i lodash,并将修改文件再度复制到node_modules/lodash中,线上正常运行
    4. 2个月后升级lodash,该问题得以解决,而我们代码引用了lodash的新特性
    5. 线上npm i lodash,并将修改文件再度复制到node_modules/lodash中,由于已更新了lodash,并且依赖于新特性,线上运行失败

    此时有个万能之策,那就是patch-package

    patch-package

    想要知道patch-package如何解决上述问题,请先了解它的用法,流程如下

    # 修改lodash中的一个小问题
    update node_modules/lodash/index.js
    
    # 对lodash的修复生成一个patch文件,位于patches/lodash+4.17.21.patch
    npx patch-package lodash(注意这个地方,取package.json里面的依赖,@dcloudio/webpack-uni-pages-loader)
    npx patch-package '@dcloudio/webpack-uni-pages-loader'
    
    # 将修复文件提交到版本管理之中
    git add patches/lodash+4.17.21.patch
    git commit -m 'fix bug'
    
    #####################此后在生成环境中执行#####################
    # 安装生产环境包
    npm i
    
    #为生产环境的lodash运行修复
    npx patch-package
    

    再看下patch-package自动生成patch文件本来的面目吧!

    它实际上是一个diff文件,在生产环境中可自动根据diff文件与版本号(根据patch文件名存取)将修复场景复原!

    # 打开patches/lodash+4.17.21.patch
    diff --git a/node_modules/lodash/index.js b/node_modules/lodash/index.js
    index 5d063e2..fc6fa33 100644
    --- a/node_modules/lodash/index.js
    +++ b/node_modules/lodash/index.js
    @@ -1 +1,3 @@
    +console.log('FIX BUG')
    +
    modules.export = require('lodash');
    

    参考:https://www.bilibili.com/video/BV1qP4y157jn?spm_id_from=333.337.search-card.all.click

  • 相关阅读:
    【NOIP2017】蚯蚓
    【CF407B】Long Path
    【NOIP2017】奶酪
    【NOIP2018】赛道修建(正解)
    【NOIP2018】旅行
    【SDOI2010】地精部落
    【NOIP2017】逛公园
    百度云网盘进行注销操作
    百度超级会员租借.我租给你。
    如何在dos中运行java中的jar包
  • 原文地址:https://www.cnblogs.com/TomAndJerry/p/16188389.html
Copyright © 2020-2023  润新知