你所不知道的模块调试技巧 - npm link #17

1. 背景

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

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

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

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

1.1 发布一个 beta 版本

  • 优点:你高兴就好。
  • 缺点: 无趣+无趣+无趣,麻烦+麻烦+麻烦。

1.2 直接用相对路径安装

$ cd path/to/my-project
$ npm install path/to/my-utils
  • 优点:简单明了
  • 缺点: 调试过程中往往需要微调,此时需要切换到 my-utils 目录修改,然后反复重新 install,很麻烦

1.3 使用软链

$ cd path/to/my-project/node_modules
$ ln -s path/to/my-utils my-utils
  • 优点:软链后,两边修改直接同步
  • 缺点: 指令操作麻烦,不同操作系统语法不一样

2. 正解 - npm link

但其实 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

3. 写在最后

  • 该方法只是为了最后一步调试,模块本身的正确性,应该更多的通过单元测试来保证。
  • 单元测试相关内容,可以参见:单元测试

你所不知道的模块调试技巧 - npm link #17相关推荐

  1. 那些你所不知道的arXiv使用技巧

    作者:Tom Hardy Date:2020-12-23 来源:那些你所不知道的arXiv使用技巧

  2. 被低估的css滤镜,你所不知道的 CSS 滤镜技巧与细节

    本文主要介绍 CSS 滤镜的不常用用法,希望能给读者带来一些干货! 系列 CSS 文章汇总在我的 Github ,持续更新,欢迎点个 star 订阅收藏. OK,下面直接进入正文.本文所描述的滤镜,指 ...

  3. 14个你可能不知道的JavaScript调试技巧

    以更快的速度和更高的效率来调试JavaScript 熟悉工具可以让工具在工作中发挥出更大的作用.尽管江湖传言 JavaScript 很难调试,但如果你掌握了几个技巧,就能用很少的时间来解决错误和bug ...

  4. js_调试_01_14 个你可能不知道的 JavaScript 调试技巧

    更快更高效地调试你的 JavaScript 了解你的工具在完成任务时有很重要的意义. 尽管 JavaScript 是出了名的难以调试,但是如果你掌握了一些小技巧,错误和 bug 解决起来就会快多了. ...

  5. chrome控制台如何把vw显示成px_你可能不知道的chrome调试技巧

    本文是对常用的chrome调试技巧进行总结整理,如果你没有深入了解过chrome调试工具,此处总有你不知道的惊喜! 从 Chrome 说起 对于大部分人来说,Chrome 可能只是个浏览器,但是对于开 ...

  6. javplayer 使用教程_视频教程 | 你所不知道的示波器使用技巧

    EEWorld 电子资讯 犀利解读 技术干货 每日更新 示波器作为工程师几乎天天使用的得力工具,其重要性毋庸置疑.尤其随着新器件应用,新技术的发展,新标准的推出工程师面临着更加复杂的信号设计及验证的要 ...

  7. 你可能不知道的 CSS 阴影技巧与细节

    关于 CSS 阴影,之前已经有写过一篇,box-shadow 与 filter:drop-shadow 详解及奇技淫巧[1],介绍了一些关于 box-shadow 的用法. 最近一个新的项目,CSS- ...

  8. 你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧

    你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧 参考文章: (1)你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧 ( ...

  9. 你所不知道的setTimeout

    JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成.它们向任务队列添加定时任务.初始接触它的人都觉得好简单 ...

最新文章

  1. button常用属性_web阶段常用单词明细表,你值得拥有
  2. 【NLP】Task5:神经网络基础
  3. 实践 Neutron 前的两个准备工作 - 每天5分钟玩转 OpenStack(78)
  4. 本地如何搭建IPv6环境测试你的APP
  5. Spark性能优化指南——基础篇
  6. 中缀表达式转换成后缀表达式(只适用于加减乘除运算)
  7. python作品代码_学习python的一些心得体会
  8. merge 与include
  9. 菜鸟进阶Linux高手之路——第四天(下)
  10. 快递物流行业如何用易语言对接验证码短信接口DEMO示例
  11. 树莓派计算机组装,Samytronix Pi:用树莓派 DIY 的桌面计算机
  12. MongoDB学习笔记之索引(一)
  13. Python概念-Item系列(林海峰教的)
  14. 万达电商为何刻意回避阿里与马云
  15. 伦敦大学金史密斯学院计算机专业,伦敦大学金史密斯学院计算机与信息系统本科.pdf...
  16. 广州搬家公司 居民搬家 公司搬迁 事业单位搬迁全天服务
  17. Android 实现点击输入框以外的区域隐藏软键盘
  18. js随机生成四个英文字母
  19. Java · 认识 String 类(上)· 创建字符串 · 字符串比较相等 · 字符串常量池 · 字符串不可变 · 字符字节与字符串
  20. poj2942点双连通奇圈-二分图判断Knights of the Round Table

热门文章

  1. Spring Cloud微服务之父工程的创建(一)
  2. 网站运营需要注意什么?
  3. 第三百三十六章 斗宗强者间的大战!
  4. 三级菜单 ajax 已经测试成功
  5. 什么是Viewport Meta(width详解)及在手机上的应用
  6. Update your Twitter status using php
  7. 确保PHP安全 不能违反的四条安全规则
  8. linux 系统tty、pty和pts 的概念及区别(转)
  9. 值传递与引用传递 c# 1613535799
  10. 前端开发 表单元素 0229