收藏文章 楼主

【第2520期】为什么你应该考虑将 node_modules 上传到远程仓库

版块:网站建设   类型:普通   作者:小羊羔links   查看:551   回复:0   获赞:0   时间:2022-01-24 21:48:04

前言

前一段时间Faker被作者破坏的事件,不知道大家有所了解没?今日文章由阿里@墨筝翻译授权分享。

@墨筝,阿里集团业务平台事业部营销导购业务线的前端开发。公号:墨筝

正文从这开始

这篇文章的作者来自于 Google 的 Chrome Devtools 团队,他在文章中谈到他们团队会将 node_modules 的文件夹上传到远程 git 仓库中,并解释了为什么这么做的原因。通常来说,因为以下三个原因,这一做法是非常反常规的。

  • node_modules 下的代码并不属于源码部分

  • node_modules 的代码体积往往非常庞大,并且如果提交到远程的话在 git diff 和 pull requests 时会这部分代码也会产生额外的干扰

  • 这部分代码通过 npm install 可以直接获取,走远程拉取还会增加仓库 clone 的时间。

在我们工作的日常实践中,我们通常也不会这么做,不仅不会这么做,而且谁要是这么做了还会被嘲笑一番。但是 Chrome Devtools 团队宣称他们从这一做法中获取到了收益。所谓兼听则明,看看他们是怎么说的也是一件有趣的事情。在他们看来,将 node_modules 文件夹提交到远程仓库中这一做法有如下好处。

节省重复安装依赖的时间

当远程仓库中已经存在 node_modules 时,仓库拉取到本地就不再需要手动进行安装依赖,这一点是显而易见的,不仅是本地开发调试可以直接启动,在一些持续集成的环境中,比如 CircleCI,GitHub Actions 等等,也不需要再安装依赖。原作者见过有一些比较庞大的项目执行 npm install 从零开始安装依赖这个过程的耗时至少需要2分钟,这还是本地安装,如果是集成环境的机器安装耗时一般还会更久。如果每一次 pull requests 和部署都执行一次依赖安装,每一天都要浪费非常多的时间。

保障依赖包环境的一致性

因为不需要重新安装依赖,所以不同开发者之间在本地运行调试源码时使用的依赖包是一致的。尽管通过一些其他的手段,比如 package-lock.json 文件的方式也能做到这一点,但是这种机制出错的情况也是时有发生,比如管理疏忽的情况下某个依赖包 y 位 z 位版本更新的自动升级导致 bug 的引入。但是如果把依赖包文件 node_modules 放进远程仓库中,另一个开发者 集成打包环境拉取之后基本上不会做什么额外的安装操作,能保证开发者之间,开发者本地和线上集成构建环境的依赖是一致的。

针对这一点我也是比较有体感的,经常遇到的一个现象是本地编译打包一切正常,但是提交线上发布时,发现 rax 某个依赖包自动升级然后就编译失败了,然后一个上午就没了。

增强开发者对于依赖引入的必要性判断

开篇中提到过,很多人不愿意将 node_modules 放置到远程仓库的原因之一就是它会导致 git diff 时产生额外的代码干扰,因为通常来说我们只会关心源码的改动,而不会关心依赖包的代码。但是依赖包代码的 diff 内容真的是完全没有益处吗?这也未必。通常来说,我们使用某个依赖包的原因是我们不想自己来写这段代码,但是当你在 diff 内容中看到该依赖包的代码实现时,你可能会思考是不是真的有必要完全引用它,可能它的实现并不是很好, 者存在很多对你来说没用的冗余代码,你完全可以自己写一个更好的,以提升性能 者只选取其中有用的一部分,以减少包体积。

防止另一个 left pad 事件的发生

left pad 事件发生于2016年,当时美国的一个28岁小伙删除了自己在 npm 上发布的一个工具包(left-pad),由于恰好这个工具包被广为使用, 导致世界各地的 JavaScript 开发者一觉醒来发现自己的代码无法运行了,并出现了如下的一个错误提示

npm ERR! 404 'left-pad' is not in the npm registry

其本质还是因为依赖包被删除之后运行 npm install 时无法找到此依赖所导致的,这种情况虽然极少发生,但是一旦发生便堪称致命,因为你基本无法知道该依赖包做了什么,而且很多情况下即使你知道也无济于事。但是如果把 node_modules 文件提交到远程仓库中,相当于是给你的依赖包文件做了一个随时可用的备份,则完全不需要担心此类情况的发生。

结语

将 node_modules 文件夹提交到远程是一件反常识的事情。起初,原作者也认为这种做法有些难以理解,但经过两年时间的实践,原作者改变了他的观点,认为这样做的收益已经超过了其带来的弊端。其实说实话,看完全文我也有点颠覆了过往的认知,倒确实可以尝试一下。

关于本文
译者 @墨筝
译文 https://mp.weixin. .com/s/-qDqfuABOCH4_os5lDuVAA
作者 @Jack Franklin
原文 https://www.jackfranklin.co.uk/blog/check-in-your-node-dependencies/

查看周刊Vol.46期


相关推荐


【第2513期】pnpm vs Yarn: monorepo node_modules


【第2385期】@于航 聊聊远程办公那些事


欢迎自荐 稿VX:zhgb_f2er,等你来

小羊羔锚文本外链网站长https://seo-links.cn 
回复列表
默认   热门   正序   倒序

回复:【第2520期】为什么你应该考虑将 node_modules 上传到远程仓库

Powered by 小羊羔外链网 8.3.11

©2015 - 2024 小羊羔外链网

免费发软文外链 鄂ICP备16014738号-6

您的IP:3.143.17.128,2024-04-19 19:44:28,Processed in 0.05012 second(s).

支持原创软件,抵制盗版,共创美好明天!
头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息