npm link详解

2023-10-27

前言

`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 -

相关文章推荐:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

npm link详解 的相关文章

随机推荐

  • AutoGPT中文版,保姆级详细安装教程 - MacOS 篇

    ChatGPT狂飙160天 世界已经不是之前的样子 新建了人工智能中文站https ai weoknow com 每天给大家更新可用的国内可用chatGPT资源 首先来简单的介绍 一下AutoGPT 簡單的說 AutoGPT 相當於給基於
  • Android 手游聚合SDK小知识(二) 聚合分包

    更新 在上一篇文章中 我们介绍了如何聚合SDK的基本原理 介绍了聚合SDK的接口设计 那么当CP接入了我们的聚合SDK 给了我们游戏apk包时 这时我们又当如何分发渠道包呢 分发渠道包 该操作方式都是在只有游戏apk包的情况下进行的 开始合
  • 【JAVA web】idea Maven jetty 修改 端口号,上下文简单教程

    idea Maven jetty 修改 端口号 上下文简单保姆版教程 首先是修改端口号 上下文修改 首先是修改端口号 clean jetty run Djetty port 端口号 可随意编辑端口号 成功图片 上下文修改 首先打开红线划圈的
  • Web容器、Servlet容器、Spring容器、SpringMVC容器之间的关系

    以下内容为个人理解 如有误还请留言指出 不胜感激 Web容器 web容器 web服务器 主要有 Apache IIS Tomcat Jetty JBoss webLogic等 而Tomcat Jetty JBoss webLogic同时也是
  • 数据库索引原理,及MySQL索引类型

    原文 数据库索引原理 及MySQL索引类型 weixin 42181824的博客 CSDN博客 https blog csdn net weixin 42181824 article details 82261988 MySQL索引类型一览
  • 阿里云ecs服务器买完后可以更换操作系统么?

    可以的 一般来说你的服务器在内地节点都是可以随意更换操作系统的 不管是阿里云windws系统更换为LInux系统还是centos系统更换为win系统镜像都是可以的 具体更换系统方法可以参考 更换系统盘 公共镜像 云服务器 ECS 阿里云 正
  • ubuntu1604常用快捷键

    简单实用的 Ubuntu 快捷键 1 Ctrl W 关闭当前 Nautilus 窗口 2 Ctrl Shift W 关闭所有的 Nautilus 窗口 3 Ctrl T 在 Nautilus 打开新的 Tab 4 Ctrl PageUp 移
  • top-k问题详解

    目录 1 TOP K问题的定义以及思想 1 TOP K问题的定义 2 解决TOP K问题的思路 排序法 不推荐使用 堆函数操作法 不推荐使用 最终算法 复杂度 完整实现 每一部都有详细的过程 1 TOP K问题的定义以及思想 1 TOP K
  • [机器学习]1.1环境安装初始化

    机器学习 第一章 环境安装初始化 python环境初始化 机器学习 前言 一 centos初始化 二 虚拟机安装 1 下载 三 Centos安装 1 镜像下载 2 镜像基础硬件配置 3 镜像安装 4 网络配置 总结 前言 chatGPT的火
  • Websocket/SocketIO性能测试

    1 Jmeter安装socket插件 打开Jmeter gt Option gt Plugin Manager gt 搜索websocket gt 安装WebSocket Samplers by Peter Doornbosch 2 每种W
  • powershell激活conda失败

    搜索powershell 管理员权限打开 输入命令conda init powershell 打开powershell命令Set ExecutionPolicy ExecutionPolicy RemoteSigned 关闭现有termin
  • π142E30 Pai142E30 四通道数字隔离器芯片代替NSi8142N0

    参数 142E30 Pai142E30 3 0kVrms 200Mbps 四通道数字隔离器芯片完美代替NSi8142N0 优势 功耗更低 速度更快 抗干扰能力强 噪声低 特性 2Pai荣湃 142E30 Pai142E30 完美代替NSi8
  • C语言结构体,共用体所占字节数计算

    字节数 环境 char short int long long long float double 指针 windows 32 gcc 1 2 4 4 8 4 8 4 windows 64 gcc 1 2 4 4 8 4 8 8 无符号型在
  • Android:这是一份全面 & 详细的Webview使用攻略

    前言 现在很多App里都内置了Web网页 Hybrid App 比如说很多电商平台 淘宝 京东 聚划算等等 如下图 京东首页 那么这种该如何实现呢 其实这是Android里一个叫WebView组件实现 今天 我将献上一份全面介绍 WebVi
  • Android Intents和Intent过滤器

    点击打开链接 intent组成 组件名 action动作 data数据 category分类 extras附加信息 flag标记 Intent负责对应用中一次操作的动作 动作涉及数据 附加数据进行描述 Android则根据此Intent的描
  • html2canvas的ignoreElements的使用方法

    我的处女作 Canvas系列教程 在我的Github上正在连载更新 希望能得到您的关注和支持 让我有更多的动力进行创作 教程介绍 教程目录等能在README里查阅 传送门 https github com 827652549 CanvasS
  • unity背景设置透明,qnx层 透传安卓显示

    相机设置为solid color 背景颜色设置为黑色透明度为0 一定设置成黑色 设置成其他颜色打包出来和ios背景融合出很奇怪的颜色 player setting 的render over native ui 勾选 上
  • 事件推送网关:让cmdb告别“花瓶”

    前言 众所周知cmdb在运维过程中的重要性 但是我们不希望它是一个 花瓶 因此 运维思索 cmdb打通zabbix jumpserver探索 成了我们当前面临的一个课题 而我们可以借助cmdb的事件推送来解决此问题 因此引入了事件推送网关
  • 成功解决Python导入opencv报错“DLL load failed while importing cv2: 找不到指定的模”

    场景描述 本人使用腾讯云服务器做图像处理的项目 导入opencv时报错 报错内容 DLL load failed while importing cv2 找不到指定的模 前提 已经安装opencv 个人认为安装教程比较好的博客是这一篇ope
  • npm link详解

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