前言

`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. 源码安装nginx开启SSL功能
  2. 什么是跨域,什么是同源
  3. 那些程序员身上共有的属性,这就是他为什么比你进步快的原因!
  4. 5000字“肝”了这篇IP协议
  5. 【BZOJ3930】[CQOI2015]选数 莫比乌斯反演
  6. 【Python】Scrapy入门实例
  7. mysql的txid是什么_mysql-存储引擎
  8. #数组元素相乘_C++ 矩阵相乘
  9. 二级域名共享cookies
  10. 简约清新二次元引导个人主页源码
  11. 基于python的电影推荐系统论文_一种电影推荐系统的设计与实现
  12. 查看alexa世界排名
  13. tar: R-4.1.0.tar.gz: Cannot read: Is a directory tar: At beginning of tape, quitting now tar: Error
  14. 利用python做出电视剧收视率排行榜
  15. mongodb的java驱动_MongoDB的java版本驱动
  16. 【C语言】之实现回文数判断
  17. 区块链可扩展性技术:闪电网络
  18. 毕业求职:求职面试前不知如何准备? 4 个秘诀助你自信面试!
  19. # 英语听抄 (英)
  20. 2022年全球与中国数模转换器市场现状及未来发展趋势

热门文章

  1. java生产者消费者模型
  2. ElasticSearch(十二):Spring Data ElasticSearch 的使用(二)
  3. RuntimeError: latex was not able to process the following string: b‘lp‘
  4. 自制一寸照片的尺寸规范
  5. linux生成4g文件,linux中创建超过4g文件的方法-o_largefile?
  6. java 简体繁体互相转换
  7. 朴素贝叶斯——新闻分类
  8. ffmpeg(七)合并音视频文件
  9. xp 无线网络 搜索 服务器,WinXP系统搜索不到无线网络的解决方法【图】
  10. 研大考研:2015考研政治认识论知识点