本文来自V同学投稿的源码共读第六期笔记,写得很有趣。现在已经进行到第十期了。你或许经常看见 npm 更新的提示
。
npm 更新提示
面试官可能也会问你,组件库更新了,怎么让使用组件的人都知道。本文分析这个提示的原理实现,很有趣。
Hello,大家好,这里是V同学
今天我们又来看源码了
今天若川大大没有写源码阅读的掘金文章
正好,可以让我们一试身手
考验一下我们之前跟随着川大的源码所锻炼的源码阅读能力
今天我们要看的是 update-notifier 的源码
老样子,在我们阅读源码之前,先分析一手,看看这个到底是干嘛用的吧
这个是我们本期源码阅读的代码仓库
大家可以先克隆下来,我们且慢慢分析
我们可以用5W1H分析法来试着去分析一下
那么什么是5w1h呢,简单来说就是从
这六个纬度去思考
那我们就一个一个来
首先,我们要来看看本期源码是什么
通过度娘,我们可以大致的了解到,我们本期要看的源码
似乎是一个和更新有关的工具,可以更新你的npm包和cli应用程序
我们在看一下仓库的readme
现在就非常的清晰明了了,这是一个以非入侵的方式通知你更新的这么一个工具
那么我们为什么要读它的源码呢
有一下几点
1. 美化终端输出信息,描绘边框。
2. 我们可以学会怎么去开启子进程
3. 给一个node方法作为传参的几种方式
4. 通过configstore这个库我们能够持久化存储一些信息
5. 通过latest-version获取对应pkg包的最新版本信息
谁应该去读他的源码
以下几类人适合去读他的源码,当然也适合来看看我的源码阅读的文章
1. 源码爱好者
2. 学习爱好者
3. 希望能学到东西的人
4. V同学的粉丝
……
在我的源码阅读的文章里面,我会一步一步的手摸手教你怎么去拆分阅读以及调试源码
在哪里学的话,这个大家可以视实际情况而定
什么时候学的也取决于你的最佳学习时间,每个人的最佳的专注和学习时间不一样
具体的话视个人情况而定
那么我们就到了最关键的一点
怎么去读
没有度过源码的同学请放心
跟着V同学走,手摸手,包你药到命除
额不不不,是药到病除
刚刚,我们把仓库的地址克隆下来了,那么接下来我们就安装一下依赖吧
进入到对应的仓库地址
输入一下命令
npm i
或者
yarn
测试非常的重要,他可以让我们非常清晰的了解
一个框架的功能以及作者写这个测试的意图,所以我们看源码,可以先看看测试
我这边用的是 vscode
找到 package.json 文件,点击调试
进入测试
有人说了,我用的不是vscode怎么办呢
其实也简单的
首先还是先问问百度,你是用的编译器是否有对应的测试插件
没有的话,可以在编译器的控制台输入测试中的命令
npm run test
或者
yarn test
即可运行对应的测试,这个是看全部代码的方式
具体通过测试看源码的案例,可以看我的这一篇笔记
今天我们只看核心代码
所以我们进入example 这个 JS 文件里面去
这个案例非常的简单,一共就17行代码
运行第四行作者给我们的命令
node example
我们发现没有反应,那么这是怎么一回事呢
我们来看一下注释
You have to run this file two times the first time
翻译过来就是第一次必须运行此文件两次
嘿,我运行过的别的程序都只需要运行一次,就你要运行两次,你搞特殊是吗
那么我们仔细来想想,要运行两次呢?
我们在来看看注释
This is because it never reports updates on the first run
翻译过来就是
这是因为它不会在第一次运行时报告更新
我们带着第一次为什么不会更新的问题来看源码
对于vscode进行node调试
我把过程放在以下gif图里面,大家可以进行参考
首先我们在example里面打上断点
然后进入调试
我们这时候发现,断点进来了
我们点击调试的↓按钮
我们发现我们进到了index.js文件里面
所以这个就是他的核心文件
我们进入到了183行
在往下走,我们进入到了第一部分
我们传入的参数会被option接到
然后对拿到的对象进行数据清洗,只保留需要的数据
如果没有需要的数据,就给他抛出个错误
接下来把需要的数据挂载到实例对象身上
检查更新时间是否符合规范
知识点:process.env 是 Node.js 中的一个环境对象。其中保存着系统的环境的变量信息。
通过获取process检查是否禁用更新
知识点:isCi的作用是如果当前环境是持续集成服务器,则返回true
判断是否在Npm脚本中通知
判断一下你是否禁用更新了
知识点:ConfigStore的作用是轻松加载和保留配置,而无需考虑在哪里以及如何
知识点:Chalk的作用是让你的终端更美观好看,具体在Vue-release这篇文章中有提到过
如果你没禁用的话,帮你把包名通过ConfigStore
进行持久化存储,顺便把最后一次检查的时间更新成现在
接下来我们顺着代码的路径,走到了中间这一行
进去的第一目光我们的卡姿兰大眼睛就可以看到好几个判断
第一个判断的大概意思是
如果你没有本地存储或者禁用更新的情况下,那么就不执行了,我们就说拜拜了
接下来,他拿到我们的之前存进去的update对象来更新
这里有一个关键点,就是我们之前埋下的坑
他第一次为什么不执行
因为这里第一次的时候,我们没有执行过check.js这个文件
所以我们这里的这个update是空的
这里在埋下一个点,为什么updata是空的导致他只执行一次呢,这个后文会讲到
我们接着往下看
知识点:spawn => 详情请参考spawn
这里通过spawn
开启一个子进程,运行check.js
,然后把options
作为调用check.js
的命令行参数
接下来我们就进入到了check.js文件里面
const options = JSON.parse(process.argv[2]);
这一段代码,意思是把我们刚才通过控制台传的option参数拿过来
知识点:latestVersion => 获取最新版本的 npm 包
拿过来之后新建一个实例 ,然后去拿到对应的包名、最新版本、当前版本、版本差别的信息
拿到信息之后,更新一下最后一次检查更新对应的时间
在顺便把信息塞到持久化存储当中的update里面、
然后关闭spawn
打开的子进程,返回原来的函数里面
当拿到最新版本的信息之后,他会把对应的实例对象返回出去
返回到了example.js文件里面
返回到了example之后去执行notify
虽然说,之前的update被存进去了,但是在notify的时候没有被读出来
所以就导致之前的update因为是空的,在最开始的时候,进不去notify的函数,就被return掉了
这就是为什么第一次执行的时候,什么都不返回的原因了
知识点:is-installed-globally:检查您的软件包是否已全局安装
知识点:is-yarn-global:检查您的yarn包是否已全局安装
接下来他会检查你是不是全局安装了,全局是不是用的yarn安装的
接下来就是控制你的控制台,在你的控制台上输入一些安装命令
知识点:boxen:在终端中创建框
完成之后,通过boxen构建一个框框,然后用template去显示更新信息
本文由哈喽比特于3年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/mg8WH8HbCMN4rLNm7Y6Pxg
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。