npm link 命令的作用浅析

【npm link】Node命令中的npm link命令的使用,还有CLI全局命令的使用,开发命令行工具必不可少的部分 ❔ 系列专栏:NodeJs 👐学习格言:成功不是终点,失败也并非末日,最重要的是继续前进的勇气 ​🔥​前言: 本文是关于Node命令中的npm link命令的详细使用,还有脚手架的背后原理,如果我们需要开发命令行工具或者脚手架时,npm link的使用是必不可少的一环,有关环境变量部分大家一定要好好理解,希望可以帮助到大家,欢迎大家的补充和纠正 阅读详情

npm link命令可以将一个任意位置的npm包链接到全局执行环境,从而在任意位置使用命令行都可以直接运行该npm包。

那么,当运行npm link时发生了什么?

下面就以Windows平台为例来展示它的处理过程。

简要地讲,这个命令主要做了两件事:

为npm包目录创建软链接,将其链到{prefix}/lib/node_modules/<package>
为可执行文件(bin)创建软链接,将其链到{prefix}/bin/{name}
以上两个路径是官方文档给出的路径,这两个路径是Linux平台上的。在Windows平台中,这两个路径为:

目录: C:\Users\{Username}\AppData\Roaming\npm\node_modules\<package>
文件: C:\Users\{Username}\AppData\Roaming\npm\<name>
并且对于可执行文件(bin)的处理并不仅仅创建了文件的软链接。接下来通过一个实例来看一下。

首先,创建如下目录:

C:\code\tool

在这个路径中执行:

npm init -f

执行之后,目录中生成了package.json文件,用编辑器打开它,其内容为:

{
  "name": "tool",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

在里面添加一个字段,表示本npm包的可执行文件位于bin/foo:

"bin": "bin/foo"

在C:\code\tool中创建目录bin, 并在bin中创建文件foo,这便是本npm包的可执行文件。

用编辑器打开foo,输入代码并保存:

#!/usr/bin/env node

console.log('foo run success');


在C:\code\tool中执行以下命令可看到输出foo run success:

node bin/foo


接下来,执行链接命令:

npm link

可以看到输出内容为:

...

C:\Users\{Username}\AppData\Roaming\npm\tool -> C:\Users\{Username}\AppData\Roaming\npm\node_modules\tool\bin\foo

C:\Users\{Username}\AppData\Roaming\npm\node_modules\tool -> C:\code\tool


此时,在任意一个位置执行以下命令都可以看到输出foo run success:

tool


使命令在全局环境可运行,这就是npm link的作用了。

此时进入到C:\Users\{Username}\AppData\Roaming\npm\node_modules\中发现有个名为tool的目录,从其图标可以看出它类似一个快捷方式,实际是一个软链接,指向C:\code\tool。

而在C:\Users\{Username}\AppData\Roaming\npm\中可看到有以下两个文件:

tool
tool.cmd
之所以这里生成的文件叫tool,是因为package.json中的name字段值为tool,而name字段的值又是执行npm init -f时根据目录名确定的。

tool文件里是一段Shell脚本,而tool.cmd里是一段cmd脚本,两者的作用都是去调用C:\Users\{Username}\AppData\Roaming\npm\node_modules\tool\bin\foo这个可执行文件。

由此可以合理推测:

tool文件是在git-bash之类的工具中执行tool命令时运行的脚本
tool.cmd文件是在Windows的CMD中执行tool命令时运行的脚本
打开tool文件,在倒数第二行加上一句

echo 'from shell'

再打开tool.cmd文件,在最后一行加上一句

ECHO "from cmd"

保存之后,分别在git-bash和cmd中执行tool命令,便可以发现git-bash中输出foo run success之后又输出了from shell,而cmd中输出foo run success之后又输出了from cmd,证明推论正确。

最后总结一下:

npm link命令通过链接目录和可执行文件,实现npm包命令的全局可执行。

ubuntu20.04下内核源码下载分析 ubuntu 20.04下内核源代码下载,配置编译环境写在前面一、安装VMware Workstation和Ubuntu20.04二、修改apt源合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 写在前面 我最近的科研工作需要使用到对ubun 阅读详情

相关推荐

防火墙旁挂组网

分析拓扑结构,涉及路由器、交换机、防火墙。步骤包括基础 IP 配置、OSPF、防火墙双机热备、安全策略等。第一步,路由器配置。R5、R6 连接 ISP 和核心交换机,配置接口 IP,然后 OSPF。然后防火墙,双机热备的 HRP、VRRP,还有安全策略。接着交换机,划分 VLAN,配置 TRUNK,加入 OSPF。

weixin_73298423的博客 904

npm link 作用

npm link` 是 npm 提供的一个命令,它的主要作用是在本地开发 npm 包时,将本地开发的包链接到全局的 `node_modules` 目录中,并且在另一个项目中也可以使用这个本地开发的包,就好像它是一个通过 `npm install` 安装的正常的第三方包一样。

weixin_64684095的博客 1357

matlab中高频变压器怎么找,干货|手把手教你绕制高频变压器

原标题:干货|手把手教你绕制高频变压器绕制一个变压器所需材料:磁芯、骨架、各种铜线、麦拉胶带。变压器参数:磁芯:EE22原边:134T(1-3脚),辅助:32T(5-4脚),输出:15T(10-9脚)原边电感:1380±10%uH漏感:≤44uH引脚分布图: 特别注意:绕制方法为网上下载,其中变压器绕制方法是对的,但其中存在着很多问题(比如,正规变压器的绕组的头和尾是要添加铁氟龙套管的,每一层之间...

weixin_30895121的博客 2125

npm link有什么作用?

总的来说,npm link是前端开发中一个非常实用的工具,它允许开发者在本地环境中快速测试和调试自定义的npm模块,提高开发效率,并简化依赖管理过程。

王铁柱666的博客 453

OpenEarthMap 与 xBD 数据集合并

整合好的数据:链接: https://pan.baidu.com/s/1uJ_Zg6n-s3u1D49OW52D7Q?pwd=2vwx 提取码: 2vwx完整整合步骤与代码如下。

qq_60293814的博客 1596

OCR文字识别基础

ocr文字识别

m0_47405013的博客 1755

Npm link的作用与使用

一、为什么要用Npm link 库包在开发或迭代后,不适合发布到线上进行调试(过程繁琐且会导致版本号膨胀) 二、Npm link工作原理 `npm link` 可以帮助我们模拟包安装后的状态,它会在系统中做一个快捷方式映射,让本地的包就好像 install 过一样,可以直接使用。 三、Npm link的使用 同一目录下的使用 // 进入应用文件夹 $ cd xxx/project_npmlink/project1 // 软链接 $ npm link ../module1 npm

weixin_42274805的博客 3万+

NX二次开发PK获取对象类型

PK_ENTITY_ask_class(),获取对象类型建议用这个函数,比较通用,包含所有对象类型,可以替代UF_MODL_ask_edge_type(),UF_MODL_ask_body_type(),UF_MODL_ask_face_type()等函数。

qq_39541524的博客 827

npm link 后怎么查看软连接和删除软连接的

pnpm 怎么查看安装的软连接;怎么删除创建的全局符号链接;删除软链接;查看软链接;怎么查看软链接,删除软连接的;这个本地的软连接,怎么删除不了了;

weixin_48674314的博客 4413

YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块

本文记录的是基于StarNet的YOLOv11轻量化改进方法研究。StarNet设计简洁,没有复杂的设计和精细调整的超参数,仅是一个 4 阶段的分层架构。并且其中能够在低维空间计算的同时考虑极高维的特征这一特性,进而提高模型精度。本文在替换骨干网络中配置了原论文中的starnet_s1starnet_s2starnet_s3和starnet_s4七种模型,以满足不同的需求。

Limiiiing的博客 5987

24、交通信号协调算法与模型解析

本文深入解析了交通信号协调中的关键算法与模型,包括多路径进展模型、MAXBAND网络系统模型和松弛启用带模型。这些模型通过合理安排相位序列、优化绿波带宽等方式,提高了交通运行的效率。文章还探讨了交通控制从单点控制向网络协调的发展趋势,分析了当前面临的挑战与机遇,并提出了未来研究方向,如借助信息技术和机器学习,深入研究交通网络的基本构成,以实现智能化和精准化的信号协调。

agile9scrum的博客 134

npm link使用

应用场景:   两个项目文件,一个是需要被调试的项目,一个是封装的组件项目。这里要做的是把组件项目设为全局,然后在调试项目里link再进行调试。 做法: 打开组件文件,拖到命令行里面复制路径(也有别的方式,但命令行绝对是最快最准确的) 打开组件的项目,cd 你复制的路径,运行npm link。(如果是刚刚拉取下来的项目需要npm install一下) 找到组件项目的package-lack.json文件,看第二行:’name’:’要复制下来的名字’ 打开要调试的项目,输入npm link 刚刚复制下来的

缓月 3616

SMOKE 3D:从 Python 到 C++ 实现车辆与行人单目 3D 视觉识别在 RK3588 上的深度部署

SMOKE的网络结构通常基于高性能的骨干网络(如DLA-34,您使用的模型就是基于此),通过编码器-解码器架构来提取特征。输入:RGB图像(本项目为骨干网络:用于特征提取。检测头热力图分支:预测关键点热力图。通常在热力图上进行NMS来找到局部最大值,即潜在的关键点位置。回归分支:对于每个关键点位置,预测上述的8维3D属性向量。分类分支:预测每个关键点对应的物体类别。置信度分支:预测每个关键点的置信度。本教程详细介绍了SMOKE单目3D目标检测模型在RK3588上的部署。我们从SMOKE的。

LXY_LOVE36的博客 439

npm link的基本用法及实例说明

如果我们想自己开发一个依赖包,在多个项目中使用它,如果直接发布到官网上固然可以,但如果修改则会非常麻烦,而且不利于在多个项目中使用。 npm link命令可以帮助我们实现这个事情 假如我们开发一个名为allenModule95的依赖包。 首先需要在该依赖包下运行npm init命令,并编写index.js文件 module.exports = { name: "allenModule95Name", sayHello: function(){ console.log(

单车去旅行的博客 6606

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

使用npm link引入本地npm工程模块

使用npm命令,直接离线引入本地工程模块,不需要install (不用上传仓库,使本地项目可以直接依赖另一个项目) Symlink(符号链接)一个package文件夹。 概括 npmlink(inpackagedir) npmlink[<@scope>/]<pkg>[@<version>] alias:npmln 描述 package 链接过程分为两步 首先、npm link将会在全局...

zollty的专栏 8119

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

npm link详解

前言`npm install` 可以把发布在 npmjs 平台上的模块包下载到本地,`npm install -g` 可以把包下下来的同时,还帮我们配置好全局变量,让我们可以直接使用命令...

champyin的博客 7325

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

npm link中文文档

Symlink(符号链接)一个package文件夹。 概括 npm link (in package dir) npm link [<@scope>/]<pkg>[@<version>] alias: npm ln 描述 package 链接过程分为两步 首先、npm link将会在全局包{prefix}/lib/node_modules/下面创建一...

dianfenze8218的博客 639

npm link与bin的一些使用

文章目录前言binnpm link总结 前言 我在使用npm link与npm bin的相关配置时,学会了一些知识,也碰到了一些比较烦人的问题,有点懵懂。 bin package.json中的bin字段是命令名到本地名的映射,在安装时,npm 会将文件符号链接到 prefix/bin 以进行全局安装。 当我们使用 npm 或者 yarn 命令安装包时,如果该包的 package.json 文件有 bin 字段,就会在 node_modules 文件夹下面的 .bin 目录中复制了 bin 字段链接的执行文

weixin_47359038的博客 2490

npm link的使用

功能 在本地开发npm模块的时候,我们可以使用npm link命令,将npm 模块链接到对应的运行项目中去,方便地对模块进行调试和测试 使用方法 创建链接 在这里,我们有两个项目,一个是npm-link-module,是我们要开发的npm模块,另一个是npm-link-example,是我们要运行npm模块的项目 首先,进入我们的npm-link-module项目,执行npm link ...

qq_16660569的博客 548

本地包调试 :npm link

引子 再次碰到调试 npm 本地包的情况,一时想不起来,看了下文档,实际操作了一下,发现了一些文档上没明写的东西。 Origin My GitHub 介绍 根据文档介绍,包的链接分为两步。 第一步 在一个包文件夹内执行npm link将在全局文件{prefix}/lib/node_modules/内,创建一个符号链接(symlink),这个链接指向npm link命令执行的地方。 第二步 到其它目录下,执行npm link packageName命令,将会创建一个从全局安装的...

txl910514的专栏 1663

npm link的基本用法及实例

如果我们想自己开发一个依赖包,在多个项目中使用它,如果直接发布到官网上固然可以,但如果修改则会非常麻烦,而且不利于在多个项目中使用。npm link命令可以帮助我们实现这个事情假如我们开发一个名为allenModule95的依赖包。 首先需要在该依赖包下运行npm init命令,并编写index.js文件module.exports = { name: "allenModule95Na

justforuse的博客 1万+

一文讲懂npm link

掌握npm link的两步流程是对任何Node.js开发者的工具集的一个有益补充。这个过程包括在依赖关系中运行npm link,以及在应用中运行npm link。在本地开发npm模块的时候,我们可以使用npm link命令,将npm 模块链接到对应的运行项目中去,方便地对模块进行调试和测试。但请注意,npm unlink是npm uninstall的别名 ❞。1.为依赖项创建全局软链npm link。一个符号链接,简称软链,是一个快捷方式,软链是指向本地的,并不会提交到git,这非常有利于我们的调试。

每天都要努力学习哦~~ 2366

npm link使用总结

一. 功能 在本地开发npm模块的时候,我们可以使用npm link命令,将npm 模块链接到对应的运行项目中去,方便地对模块进行调试和测试。 二. 使用方法 1. 在模块中创建链接 有两个项目,一个是bee-ui(基本组件库),是我们要开发的基础模块,另一个是要运行模块的项目camera-store-mobile 首先,进入我们的bee-ui,执行npm link cd bee-ui npm link 执行命令后,bee-ui会根据package.json上的配置,被链接到全局,路径是{prefix}/

EmotionComputer 1171

npm link的作用

语法: 1. 在一个包目录下npm link (把当前的包目录软连接到global folder里面,把二进制文件也软连接到global的bin里面 这个prefix可以用npm config ls查看) 2. npm link <pkg> npm link <pkg>会把global目录下的东东软连接到当前的node_modul...

dglf54292的博客 523
上一篇: Scratch Blocks本地环境搭建
下一篇: scratch3 Getting Started
章志强
博客等级 码龄15年 523粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值