title: npmjs的调试
date: 2019-06-10 10:06:03
categories:


[Toc]

参考文章:npm link,你不知道的npm模块调试技巧

一、基本的操作

1. 背景

node 应用开发中,我们不可避免的需要使用或拆分为 npm 模块,经常遇到的一个问题是:

新开发或修改的 npm 模块,如何在项目中试验?

新同学一般会有以下几种方式:

为了方便示范,我们假设项目是 my-project, 需要用到一个独立的 my-utils 模块

1.1 发布一个 beta 版本

1.2 直接用相对路径安装

方式1:终端npm install 路径

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

例如:

cd xxx/demo
npm install ../react-native-theme-overlay
附:../react-native-theme-overlay 这个路径是react-native-theme-overlay这个库其自身的pageage.json文件所在的路径

则package.json中
原来:
    "react-native-theme-overlay": "^0.8.3",
现在:
    "react-native-theme-overlay": "file:../react-native-theme-overlay",

方式2:直接在demo的package.json中处理。

做法,如上例子,直接写”file:../react-native-theme-overlay”

问题:如果调试的b库,依赖调试的a库,这个时候想a、b两个调试库都OK,应该怎么处理?

答:

1.3 使用软链

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

但其实 npm 本身已经对此类情况提供了专门的 npm link 指令。

相关文档: https://docs.npmjs.com/cli/link

下面我们简单介绍下用法:

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

简单的替换一个单词,就搞定了,cool~

如果这两种的目录不在一起,那还有一种方法:

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

该指令还可以用来调试 node cli 模块,譬如需要本地调试我们的 egg-init,可以这样:

$ cd path/to/egg-init
$ npm link
$ # 此时全局的 egg-init 指令就已经指向你的本地开发目录了
$ egg-init # 即可

想去掉 link 也很简单:

$ npm unlink my-utils 
或者 直接$ npm unlink 这样所有的link都会去除

3. 写在最后