前言
「我正在参与掘金会员专属活动-源码共读第一期,点击参与」
作为一个合格的前端(摸鱼)工程师,经常在github
上看到很多优秀的项目,但都是只知道如何去使用。本文将以omit.js
为例,一起看看怎样学习阅读查看github
上项目代码,使用VsCode
来调试项目,一步步的查看代码是这么运行的。
准备
在官网下载安装最新版本 VSCode。
准备源码
1 | # clone 项目 |
用VsCode
打开项目
omit.js介绍
我们要学习一个项目,就需要带着问题去学习,在学习的时候要知道这个项目提供了什么?怎样去使用?一般在项目的README.md
文件中都会有项目的一些介绍。以omit
为例,它主要是提供了一个对象剔除的功能,可以将对象中指定的属性删除,返回剔除后的对象。
1 | # 安装 |
在项目中使用
1 | # ESM |
知道的了omit.js
主要功能后,来看一下它是如何实现的。
源码阅读
我们用VsCode
打开项目,我们要学习一个项目,最先查看的文件就是package.json
,这里会有项目的一些描述信息比如版本、作者、入口文件、命令、依赖等信息。
我们可以看到它有这么几个命令
1 | { |
这几个命令都和、np`有关,而我们也看到项目有安装这几个依赖包,有兴趣的可以去了解一下,这里做一下简单的介绍。
我们着重关注一下compile
命令,它通过.fatherrc.js
配置来编译项目,在这里我们可以看到项目的入口路径在src/index.js
。
1 | export default { |
我们来看一下源码
1 | function omit(obj, fields) { |
代码很好理解,先是通过Object.assign
拷贝一下目标对象,为了是不影响到原对象。然后便利fields
数组,通过上面的例子我们知道,这里传入的是需要剔除的对象属性,是一个数组,每一项为string
。现获取到需要删除的key,在通过delete
关键字删除拷贝对象里的属性,最后将拷贝的对象返回出去。
这里有一个问题是,只用了一层的循环。如果我对象嵌套很深的话,是无法进行处理的。
代码如何运行
看完源码后,来看一下它是如何在我们项目中运行的?
在package.json
文件中,我们可以看到这么几个字段
1 | { |
执行一下compile
命令后发现会多es、lib
文件,再看一下安装包后node_modules
文件下的omit.js
目录结构。
然来是项目在compile
后会生成es、lib
两个文件,其中es
为源码,lib
为经过bale
处理后的代码。我们在安装完包后,在项目require()
引入项目的时候,其实就是将package.json
中的main
路径下的代码引入进来,也就是node_modules/moit.js/lib/index.js
里的代码。
如何调试代码
我之前都不会调试代码,直接一行console.log()
走遍天下,遇到一些负责的代码根本都弄不清逻辑循序,而且还不优雅。后来慢慢学会了通过VsCode
调试代码,这里就先简单介绍一些如何通过VsCode debuger
来调试Node
代码,还是以omit.js
为例。
我们打开VsCode
左侧插件栏中的运行和调试
,也就是debug
功能,然后为项目创建一个launch.js
文件来配置debug
,然后选择Node.js
将配置文件中program
参数修改为omit
函数的位置
1 | "program": "${workspaceFolder}/src/index.js", |
${workspaceFolder}
只的是项目的根目录
我们在src/index.js
下直接调用一下omit
方法
1 | function omit(obj, fields) { |
然后在function omit(obj, fields)
这行打上断点,看一下函数的具体执行步骤。然后在debug
栏点击运行,就可以看到进入了断点当中。
这里就可以看到每一行执行的结果,更方便的去调试理解代码。
总结
这里只是用omit.js
项目作为示例,该如何去学习一个github
项目代码,如何去看懂一些项目结构,知道它怎么运行。也可以更好的帮助我们自己去成长,学习优秀项目,在以后的工作日常中得以运用。比如我就看到该项目中使用了fabric
包,将一些[[1-blog/工程化/Eslint | eslint]],[[…/…/5-project/project-builder/eslint & prettire & typescript#Prettier | prettier]]等配置通过
require方式引入进来,可以统一封装使用。
np`可以进行自动发包。文中提到的如何调试代码也是我最近入手前端调试通关秘籍 这本小册才学会的,而且调试的方法也还不止一种。希望能借用【源码共读】活动,能让我培养起学习其他项目的习惯。