模块调试技巧 --- npm link 一学就会

2,377 阅读1分钟

Lynne,一个能哭爱笑永远少女心的前端开发工程师。身处互联网浪潮之中,热爱生活与技术。

前言

node 应用开发中,不可避免的需要使用或拆分为 npm 模块。

那么在开发npm包的过程中,借助 npm link 可以很方便地实现调试代码,本篇文章主要介绍 npm link 的5种方式,前两种为主流方式。一看就会~~

方法一 link 模块项目路径

$ cd path/to/my-project // 先切到引入项目路径下

$ npm link path/to/my-utils // 然后 link 被引入npm包的项目路径

上述方法适用于引用和被引入项目在同一个目录下。

去掉 link 很容易,只要:

$ npm unlink path/to/my-utils

方法二 link 模块项目名称

$ # 先去到模块目录,把它 link 到全局
$ cd path/to/my-utils
$ npm link
$
$ # 再去项目目录通过包名来 link
$ cd path/to/my-project
$ npm link my-utils

这种方式应该是最受开发者欢迎的了!

我在项目中经常采用这种方式:

npm link

image.png

npm link XXX

image.png

去掉 link 很容易,只要:

$ npm unlink my-utils

图中出现了wraning,明显是别的包,不用care。

方法三 使用软链

$ cd path/to/my-project/node_modules
$ ln -s path/to/my-utils my-utils

可以用npm config get prefix 查看路径前缀。

缺点: 指令操作麻烦,不同操作系统语法不一样

但是同一操作系统下还是很香的~~~~

下面举两个同样可行但不太好用的反例:

发布beta 版本

除了不占用正式版本好像没有区别,太麻烦了!

直接用相对路径安装

$ cd path/to/my-project
$ npm install path/to/my-utils

缺点是切换路径很麻烦。

发布

调试完就是发布了

一般使用latest来设置用户npm install默认安装的版本,使用alpha来设置测试版本,当测试版本测试完毕之后,使用

npm dist-tag add <pkg>@<version> [<tag>]

来切换不同tag的版本号,例如,1.3.1已经测试完成,我们可以使用npm dist-tag add B@1.3.1 latest来把原本属于alpha的分支切到latest。tag不加的话默认是latest。

当然,还可以通过mpm dist-tag add来添加你自己的tag。

补充: fix bug

这么简单的操作还有人遇到bug?不愧是我。。。

npm link 本地更新后的包发现报错: not found 'moudule'...

两个排查思路,根据报错判断并排查安装没有found的包:

  1. 更新包是否安装了依赖包 - 犯的第一个错,本地更新的包没有 npm install...

  2. 更新包的依赖包是否需要在本地安装

  3. 为了避免复杂的依赖包安装问题,最后选择了软链的方式:

直接

$ cd path/to/my-project/node_modules
$ ln -s path/to/my-utils my-utils

这里的 path 直接用文件路径即可,不必加文件前缀。

首先我们要知道 npm link 的原理,这种link是通过软链实现的,link的本地包会完全取代我们项目 node_moudules中原来的包,可能就会删除一些项目中的依赖包,因此要在项目中单独安装这些被误删的依赖包。

总结

如此简单的模块调试大法你学会了吗?

最后一定要了解的package.json小知识:

  • package.json:用于标注项目中对各个npm包的依赖。
  • package-lock.json:用于记录当前状态下实际安装的各个npm package的具体来源和版本号。