当前位置: 首页 > news >正文

如何制作一个企业网站互联网广告公司排名前十

如何制作一个企业网站,互联网广告公司排名前十,邵阳优秀网站建设,wordpress 置顶排序文章目录 一、前言二、补丁方案2.1、patch-package2.2、pnpm patch 三、换日方案四、总结五、最后 一、前言 在开发过程中,发现某个npm包有Bug,应该怎么办?可以试试下面这2种方案: 代码量少,可以直接修改npm包代码的&…

文章目录

  • 一、前言
  • 二、补丁方案
    • 2.1、`patch-package`
    • 2.2、`pnpm patch`
  • 三、换日方案
  • 四、总结
  • 五、最后

一、前言

在开发过程中,发现某个npm包有Bug,应该怎么办?可以试试下面这2种方案:

  1. 代码量少,可以直接修改npm包代码的,考虑补丁方案。
  2. 代码量多,或者npm包代码是压缩混淆过的,不具备修改条件。修改源码后,再修改包名,重新发布,在应用代码中更换引用。为叙文方便,我将这种方案命名为换日方案(偷天换日,李代桃僵)。

二、补丁方案

2.1、patch-package

patch-package是一个用于修复第三方依赖包的工具,使用方式非常简单。

它支持npmyarn v1,如果是yarn v2+或者pnpm,则使用自带的patch方案(下文会介绍pnpm方案)。

安装:

$ npm i patch-package
$ yarn add patch-package postinstall-postinstall

如果只是前端使用,可以添加--dev-D参数。如果是后端使用,为保障生产模式(会去除devDendencies依赖)也能正常使用,就不要加了。

node_modules中找到你要修改的npm包,修改内容后,就可以运行patch-package创建patch文件了。

$ npx patch-package package-name   # 使用npm
$ yarn patch-package package-name  # 使用yarn

运行后会在项目根目录下创建一个patches文件夹,并生成一个名为package-name+version.patch的文件。将该patch文件提交至版本控制中,即可在之后应用该补丁了。

以我修改的verdaccio为例,会生成一个verdaccio+4.4.0.patch的文件,内容大致如下:

diff --git a/node_modules/verdaccio/build/index.js b/node_modules/verdaccio/build/index.js
index 3a79eaa..d00974b 100644
--- a/node_modules/verdaccio/build/index.js
+++ b/node_modules/verdaccio/build/index.js
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {});exports.default = void 0;+console.log('---------------')
+var _bootstrap = require("./lib/bootstrap");

完成上述操作后,最后在package.jsonscripts中加入"postinstall": "patch-package"

"scripts": {"postinstall": "patch-package"
}

这样当其他同事拉下代码,运行npm install或是yarn install命令时,便会自动为依赖包打上我们的补丁了。

简单来说,这个方案的原理就是记录补丁的代码与位置,利用npmhookpostinstall会在npm install后触发),在安装完依赖以后,触发相应的脚本,将补丁覆盖到node_modules对应的包里。

当然,补丁是对应具体版本的,需要锁定版本号。这样的缺点是如果要升级的话,还得重新来一遍,不过不是有Bug或性能问题,通常不必追求新的版本。

2.2、pnpm patch

pnpmpatch自称灵感来自yarn的类似命令。由于yarn v2可能走了邪路,我们就不介绍了。

首先,执行pnpm patch <pkg name>@<version>。该命令会将指定的软件包提取到一个可以随意编辑的临时目录中。

完成修改后, 运行pnpm patch-commit <path>(是之前提取的临时目录,这个临时目录会长到你根本记不住,不过不用担心,命令行里会有完备的提示) 以生成一个补丁文件,并提供patchedDependencies 字段注册到你的项目中。

比如,我想修改一个is-even的包:

pnpm patch is-even  
You can now edit the following folder: /private/var/folders/sq/0jfgh1js6cs8_31df82hx3jw0000gn/T/29ba74c7c7ffd7aa157831c6436d3738Once you're done with your changes, run "pnpm patch-commit /private/var/folders/sq/0jfgh1js6cs8_31df82hx3jw0000gn/T/29ba74c7c7ffd7aa157831c6436d3738"

按照提示,打开这个文件夹,加一行代码:

img

执行上面控制台的提示:

pnpm patch-commit /private/var/folders/sq/0jfgh1js6cs8_31df82hx3jw0000gn/T/e103de90617a18eee7942d1df35a2c48
Packages: -1
-
Progress: resolved 5, reused 6, downloaded 0, added 1, done

这时你会发现package.json中多了一段内容:

"pnpm": {"patchedDependencies": {"is-even@1.0.0": "patches/is-even@1.0.0.patch"}
}

根目录下,也多了个文件夹patches,打开以后,你就能找到添加的代码:

img

打开node_modules/is-even/index.js,可以看到已经多了我们添加的代码:

img

删除node_modules,重新pnpm i安装依赖,仍然与现在一样,这就代表成功了。

整个流程下来,我们看得出来相比于patch-package,要稍微复杂点儿,但也是可以接受的。

注意:patches目录是一定得提交到git的。

三、换日方案

如果要修改的代码较多,或者不具备修改条件,这时就需要修改源码。到GitHub上找到npm包的源码,Fork该项目,修改代码后,再修改包名,重新发布,比如你要修改的包是lodash,可以修改为awesome-lodash,在应用代码中更换引用。

本来这个方案没什么好说的,但有一种情况,如果你修改的是个底层包,也就是说并不是你的应用代码中直接引用的,而是你引用的npmA所依赖的,甚至可能同时被包B依赖的,这时就比较尴尬了,你不可能再去修改AB的源码,那就太不值当了。

pnpm提供了一种别名(Aliases)的能力。

假设你发布了一个名为awesome-lodash的新包,并使用lodash作为别名来安装它:

$ pnpm add lodash@npm:awesome-lodash

不需要更改代码,所有的lodash引用都被解析到了awesome-lodash。就这么简单,上面说的问题就解决了。

再说点儿题外话,有时你会想要在项目中使用一个包的两个不同版本,很简单:

$ pnpm add lodash1@npm:lodash@1
$ pnpm add lodash2@npm:lodash@2

现在,您可以通过 require('lodash1') 引入第一个版本的 lodash 并通过 require('lodash2') 引入第二个。

pnpm的钩子结合使用功能会更加强大,比如你想将node_modules里所有的lodash引用也替换为awesome-lodash,你可以用下面的.pnpmfile.cjs 轻松实现:

function readPackage(pkg) {if (pkg.dependencies && pkg.dependencies.lodash) {pkg.dependencies.lodash = 'npm:awesome-lodash@^1.0.0'}return pkg
}module.exports = {hooks: {readPackage}
}

四、总结

在开发过程中发现npm包的Bug,首先向原作者提交issueFork代码修改后提交合并请求。但遇到不活跃或拒绝修改的情况,项目等待时间会很长。这时可以使用补丁方案或换日方案进行解决。

补丁方案中,如果是npmyarn v1,可以使用patch-package工具包处理;如果是yarn v2pnpm,可以使用各自的patch命令。

换日方案,则是修改源码,发布新的npm包后,利用pnpm的别名功能,将所有依赖原npm包的地方,全部替换为新的包。

这种场景在日常开发中还是比较常见的,这里为大家提供一种思路。当然,如果真是个Bug,别忘了提issuePR,为开源贡献自己的一份力量,在与作者的沟通交流中,相信你也能受益匪浅。

五、最后

本人每篇文章都是一字一句码出来,希望对大家有所帮助,多提提意见。顺手来个三连击,点赞👍收藏💖关注✨,一起加油☕

http://www.ds6.com.cn/news/31723.html

相关文章:

  • 游学做的好的网站手机网页制作
  • 深圳建网站公司哪家好推广平台哪个效果最好
  • 官方企业微信app下载seo搜索引擎优化主要做什么
  • 网站菜单模板今日头条新闻10条简短
  • 做网站的企划书网络工程师培训班要多少钱
  • 做视频怎么去除网站哈尔滨企业网站seo
  • 能够做网站的资质推广是什么意思
  • 学院网站怎么做的找一个免费域名的网站
  • 花瓣网网站模板软文写作是什么意思
  • 企业建设网站网站建设公司室内设计师培训班学费多少
  • 成都有什么好玩的旅游景点免费seo网站优化
  • 想做淘宝 网站怎么做汕头网站推广排名
  • 如何让人帮忙做网站培训体系包括四大体系
  • 衡阳百度网站建设网络软文名词解释
  • 免费建立自己的网站网络推广工作好吗
  • 个人网站的设计网页模板免费html
  • 一级A做爰片秋欲浓网站百度爱采购关键词优化
  • 做网站的专业叫什么北京网站seo公司
  • 网站建设团队与分工免费b站推广网址有哪些
  • 给网站做灰盒渗透测试需要哪些数据百度贴吧官网入口
  • 免费建站系统对比如何开发一款app软件
  • 网站充值如何做post的荆门刚刚发布的
  • wordpress 编辑器添加自定义按钮西昌seo快速排名
  • 衣服网站建设策划书东莞seo建站优化哪里好
  • 镇江网站搜索引擎优化西安网是科技发展有限公司
  • 青浦做网站百度旅游官网
  • 中国营销传播网appseo研究协会网是干什么的
  • 网站访问不了的原因网络推广怎么找客户
  • 网站建设 比选制作一个网页的步骤
  • 网站支付功能建设百度seo可能消失