前言

`npm install` 可以把发布在 npmjs 平台上的模块包下载到本地,`npm install -g` 可以把包下下来的同时,还帮我们配置好全局变量,让我们可以直接使用命令而不是通过 node 来执行或者配置 `package.json` 的 script 脚本来 run。

但这仅限于已经发布的包,那对于未发布的包,要怎么测试使用呢?难道要把一个未经测试的包发布上去然后 install 下来测试?当然不能这么做,也不用这么做。npm 官方早已考虑到了这一点,给我们提供了测试本地的包的工具指令:`npm link`。

npm link原理

`npm link` 可以帮助我们模拟包安装后的状态,它会在系统中做一个快捷方式映射,让本地的包就好像 install 过一样,可以直接使用。

在 mac 中,我们在终端可以直接敲命令,其实是在执行 `/usr/local/bin` 目录下的脚本,这个目录可以认为是我们的全局命令所在的地方。

而当我们在 `npm install -g` 的时候,其实是将相关文件安装在 `/usr/local/lib/node_modules` 目录下,同时在全局命令 `/usr/local/bin` 目录下会有一个映射脚本,将其指向 /usr/local/lib 下的真实文件。这么做的好处是,可以在保证只有一份可执行文件的前提下,给命令取别名。

同样的,`npm link` 做的事情也是一样,唯一的区别是,它在 /usr/local/lib 下的 `node_modules` 里不是存的真实的文件,而是存了一个快捷方式,指向你当前执行 `npm link` 的目录。如果开发的的是 node 包,则执行的命令名和真实执行的文件入口,会通过项目的 `package.json` 里 `bin` 的配置来获取。

如何使用

cd projectdir
npm link

然后会看到输出类似如下的链接信息,说明成功。

/usr/local/bin/yourpakagename -> /usr/local/lib/node_modules/yourpackagename/xxx
/usr/local/lib/node_modules/yourpackagename/xxx -> /Users/username/Documents/xxx(your real project path)

全局link

测试 node 环境下运行的包时,需要使用全局 link。并且做`npm link`之前,需要在 `package.json` 里配置 `bin` 字段。

# package.json"bin" : {"your-command-name": "./path-to/your-command-entry-file"
}

然后再在当前目录下运行

npm link

成功后,就可以直接在终端执行全局命令 `your-command-name` 了。

项目下link

如果是测试前端包,跑在浏览器环境的,比如UI组件库,那需要做两次 link。

先进入待测试组件库目录,将开发的包 link 到全局:

npm link

之后,再进入要使用该组件库的工程,然后在工程中 link 这个组件库:

npm link your-ui-lib

现在你就可以在你的工程中使用这个 UI 组件库,就好像这个 UI 库被 install 到工程中一样。

- End -

相关文章推荐:

  • 那些你可能不知道的 npm script

npm link详解相关推荐

  1. Smart Link详解及其配置

    smart link相关概念和解释 smart link是什么?(华三.华为的私有协议) 如图所示,Switch A 通过 Switch B 和 Switch C 双上行到 Switch D. 1. ...

  2. Node.js学习笔记——模块加载机制及npm指令详解

    文章目录 二.模块化 1.模块化的基本概念 2.Node.js 中的模块化 Node.js 中模块的分类 加载模块 Node.js 中的模块作用域 向外共享模块作用域中的成员 Node.js 中的模块 ...

  3. npm scripts详解

    前言 这个主题之前有分享过的,不过没有今天这么基础,本文由@yangfch3带来的分享,比较偏原理跟实践性. 正文从这开始- npm 不仅可以用于 模块管理,还可以用于 执行脚本. package.j ...

  4. [yc]详解link

    [yc]详解link 详解link 有些人写C/C++(以下假定为C++)程序,对unresolved external link或者duplicated external simbol的错误信息不知 ...

  5. 微信小程序使用 npm 包,举例图文详解

    使用 npm 包前提条件: 下载安装,配置npm环境变量,不懂得可以上网查教程,本文不再描述 小程序使用 npm 包简述 1.初始化 package.json 2.勾选允许使用 npm(新版微信小程序 ...

  6. npm命令--安装依赖包--用法/详解

    原文网址:npm命令--安装依赖包--用法/详解_IT利刃出鞘的博客-CSDN博客 简介 本文介绍npm如何安装依赖包. 用法 命令 作用 详述 npm install <pkg> //同 ...

  7. 详解BLE 空中包格式—兼BLE Link layer协议解析

    BLE有几种空中包格式?常见的PDU命令有哪些?PDU和MTU的区别是什么?DLE又是什么?BLE怎么实现重传的?BLE ACK机制原理是什么?希望这篇文章能帮你回答以上问题. 虽然BLE空中包(pa ...

  8. linux ln(link) 命令详解

    linux ln(link) 命令详解 功能说明:连接文件或目录. 语 法:ln [-bdfinsv][-S <字尾备份字符串>][-V <备份方式>][--help][--v ...

  9. Windows系统下nodejs、npm、express的下载和安装教程详解

    这篇文章主要介绍了Windows系统下nodejs.npm.express的下载和安装教程详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 1. node.js下载 首先进入http://nod ...

  10. Node.js npm 详解

    一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...

最新文章

  1. Curl中的参数知多少
  2. HTML td 标签的 colspan 属性
  3. 美国数学月刊问题18-10-31
  4. java写大文件_java实现超大文件的读写功能
  5. python网格搜索核函数_(转载)Python机器学习笔记GridSearchCV(网格搜索)
  6. 成也标签败也标签--真实的模型案例分享
  7. postgre非零相除等于0_LeetCode刷题实战29:两数相除
  8. (转)MapReduce中的两表join几种方案简介
  9. Linux 启动流程详细解析
  10. 2022年第五届中青杯赛题浅评
  11. yabailv 运放_运放块压摆率单位增益频宽和逻辑器件传输延时
  12. python输入一段英文_编写程序,用户输入一段英文,然后输出这段英文中所有长度为 3 个字母的单词。_学小易找答案...
  13. github 提交消息的emoji表情符号规范
  14. consonant combination
  15. 教你在“狼人杀”中实现变声效果
  16. 毕业生的商业软件开发之路 --- 现代商业软件开发概况
  17. 中兴echat_公网对讲机都有哪些平台?
  18. STK中设置卫星的多波束模型
  19. 阿里图标库icon字体使用详细步骤
  20. 关于计算机初一作文,网络的初一作文

热门文章

  1. java微信开发页面清除缓存,h5清理微信浏览器网页缓存
  2. HTML5网页设计盒子模型-内容+padding+boder+margin
  3. 弘辽科技:新手拼多多店铺该怎么引流
  4. 基于Matlab的随机森林算法实现(附算法介绍及代码详解)
  5. Python实现B站MP4格式音频与视频的合并!超详细的教程!
  6. 误删除文件怎么才能恢复
  7. 若依vue版菜单点不开 Error: Cannot find module ‘@/views/system/user/index‘
  8. PB设置表格背景颜色
  9. java面向对象数组实现家庭收支记账软件_C项目-家庭收支记账软件
  10. 树莓派获取root权限