NPM包调试方式总结

4,387 阅读3分钟

一、npm包分类

按照我个人的理解,在调试过程npm包可以分成两类:

1. 可用于开发的npm包:这类npm包在node_modules文件下的源码以及入口文件都没有经过特殊的处理,我们可以很方便地对其代码进行阅读,甚至修改, 具体表现如下图:

1.png 2. 仅用于生产环境的npm包:这类npm包在node_modules文件下的表现为经过特殊打包后杂乱无章的js代码,完全无法进行阅读,具体表现如下图:

2.png

下面本文将会根据以上两个分类总结不同的调试方法。

二、npm包调试方法

1. 调试:可用于开发的npm包

  • 定位入口文件的位置: 在node_modules下的每个包文件夹中,都有一个package.json文件,这个文件中会记录了这个第三方库的入口文件名,我们可以根据里面的main字段来确定:

3.png

  • 直接在入口文件中打断点调试: 对于这类npm包的入口文件,我们可以看到代码都是没经过特殊压缩处理,方便阅读的。这样我们可以根据自己的理解,直接在代码里打断点调试。举个例子,我在调试第三方库vue-infinite-scroll时,是直接在项目的node_modules下找到vue-infinite-scroll编译好的js文件,并在其中打上断点来调试的。如下图:

4.png

2. 调试:仅用于生产环境的npm包

软链接( npm linkyarn link):通过软链接的方式,我们可以把项目中的npm包链接到另一个项目,而使用方式也很便捷:

  1. 从远端仓库clone你想要调试的npm包到机器中,进入该目录并执行 yarn link或者npm link:这样就给我们想要调试的npm包项目创建了一个全局的链接。

5.png 2. 回到我们的前端项目目录中,执行yarn link ${packageName}或者npm link ${packageName}, 这样就会直接将我们刚刚创建的本地npm模块的路径作为普通的npmlink到我们的项目里。

Tips: 注意这里的packageName一定要对应你的npm包package.json里的name字段值。

6.png

  1. 进入刚刚从远端仓库clone你想要调试的npm包目录中,修改代码至自己想要的效果。然后在package.json文件中查找用于构建项目代码的指令,在命令行中执行,代码构建成功后,即可在前端项目中进行调试啦!

  2. 去除软链接: 

  • 先在使用npm包的项目的文件目录下解除特定的链接:yarn unlink ${packageName}或者npm unlink ${packageName}
  • 再在从远端仓库clonenpm包目录中,去除全局链接:yarn unlink 

3. 总结

实际上,link软链接的方法对于上面提到的两种npm包的调试来说都是可用的。但是相比于第一种调试方法,link软链接的方法需要去npm包的github仓库拷贝项目到本地,并建立软链接。安全起见,在调试完毕之后还需要去除软链接。这无疑是带来了更多的工作量。因此对于那些可阅读的npm包来说,我会建议自己用第一种方法来调试。