一、基本的操作
1. 背景
node 应用开发中,我们不可避免的需要使用或拆分为 npm 模块,经常遇到的一个问题是:
新开发或修改的 npm 模块,如何在项目中试验?
新同学一般会有以下几种方式:
为了方便示范,我们假设项目是 my-project, 需要用到一个独立的 my-utils 模块
1.1 发布一个 beta 版本
- 优点:你高兴就好。
- 缺点: 无趣+无趣+无趣,麻烦+麻烦+麻烦。
1.2 直接用相对路径安装
方式1:终端npm install 路径
1 | $ cd path/to/my-project |
- 优点:简单明了
- 缺点: 调试过程中往往需要微调,此时需要切换到 my-utils 目录修改,然后反复重新 install,很麻烦。
例如:
1 | cd xxx/demo |
方式2:直接在demo的package.json中处理。
做法,如上例子,直接写”file:../react-native-theme-overlay”
问题:如果调试的b库,依赖调试的a库,这个时候想a、b两个调试库都OK,应该怎么处理?
答:
1.3 使用软链
1 | $ cd path/to/my-project/node_modules |
- 优点:软链后,两边修改直接同步
- 缺点: 指令操作麻烦,不同操作系统语法不一样
2. 正解 - npm link
但其实 npm 本身已经对此类情况提供了专门的 npm link 指令。
相关文档: https://docs.npmjs.com/cli/link
下面我们简单介绍下用法:
1 | $ cd path/to/my-project |
简单的替换一个单词,就搞定了,cool~
如果这两种的目录不在一起,那还有一种方法:
1 | $ # 先去到模块目录,把它 link 到全局 |
该指令还可以用来调试 node cli 模块,譬如需要本地调试我们的 egg-init,可以这样:
1 | $ cd path/to/egg-init |
想去掉 link 也很简单:
1 | $ npm unlink my-utils |
3. 写在最后
- 该方法只是为了最后一步调试,模块本身的正确性,应该更多的通过单元测试来保证。
- 单元测试相关内容,可以参见:单元测试