npx 的作用以及延伸知识(.bin目录,npm run xx 执行)
文章目录
- 前言
- 原理解析
- 1. npx 的作用
- 2. 为什么会有 `node_modules/.bin/lerna`
- 3. npx 的查找顺序
- 4. 执行流程
- 总结1:
- 1. `.bin` 机制
- 什么是 `node_modules/.bin`?
- 例子
- 2. npx 的底层实现
- npx 是如何工作的?
- 为什么推荐用 npx?
- npx 的特殊能力
- 3. yarn 的机制
- 总结2:
- `.bin` 目录的实际内容
- 1. `.bin` 目录的作用
- 2. 实际内容举例
- 3. 如何查看 .bin 目录内容
- 4. 这些文件的作用
- 5. 关联知识
前言
在终端执行 lerna run build 时出现了 bash: lerna: command not found 的错误。这说明当前环境下找不到 lerna 命令
那么 npx lerna run build 为什么会自动使用本地 node_modules/.bin 下的 lerna,以及其原理。
原理解析
1. npx 的作用
npx是 Node.js 附带的一个命令行工具(npm 5.2+),用于临时调用项目依赖中的可执行文件(bin)。- 当你在项目根目录下运行
npx lerna run build时,npx会优先在当前项目的node_modules/.bin目录下查找lerna可执行文件。
2. 为什么会有 node_modules/.bin/lerna
- 当你在项目的
package.json里声明了lerna作为devDependencies,并执行过npm install或yarn install后,lerna的可执行文件就会被自动放到node_modules/.bin/lerna。 - 这个
.bin目录是 npm/yarn 的标准机制,用于存放所有依赖包的命令行工具。
3. npx 的查找顺序
npx会先查找本地node_modules/.bin,如果找不到才会去全局环境查找。- 这样可以确保你用到的是当前项目依赖的 lerna 版本,而不是全局安装的版本,保证了版本一致性和可移植性。
4. 执行流程
- 你输入
npx lerna run build npx查找node_modules/.bin/lerna- 找到后,直接调用这个本地的 lerna 执行
run build命令 - lerna 会根据你的 monorepo 配置,依次在各个包下执行
build脚本
总结1:
npx让你无需全局安装 lerna,也不用关心 PATH 配置,直接用本地依赖的 lerna。- 这样做可以保证团队协作时每个人用的 lerna 版本一致,避免“在我电脑上没问题”的情况。
下面一步步详细讲解 npm/yarn 的 .bin 机制和 npx 的底层实现原理。
1. .bin 机制
什么是 node_modules/.bin?
- 当你用 npm 或 yarn 安装依赖时(无论是全局还是本地),如果某个包的
package.json里有"bin"字段,npm/yarn 会自动把这些可执行文件的快捷方式(Windows 下是.cmd文件,Unix 下是软链接)放到当前项目的node_modules/.bin目录下。 - 这样你就可以在命令行里直接运行这些工具,而不用写完整路径。
例子
比如你安装了 lerna 作为 devDependencies:
npm install lerna --save-dev
此时会生成:
node_modules/.bin/lerna.cmd # Windows 下的可执行脚本
node_modules/.bin/lerna # Unix 下的软链接
这些文件实际上会调用 node_modules/lerna/cli.js 或类似的入口文件。
2. npx 的底层实现
npx 是如何工作的?
- 当你运行
npx lerna run build时,npx 会在以下路径顺序查找lerna:- 当前目录下的
node_modules/.bin - 全局安装的包
- 当前目录下的
- 找到后,npx 会直接调用这个可执行文件(比如
node_modules/.bin/lerna.cmd),并把后面的参数传递给它。
为什么推荐用 npx?
- 保证你用的是当前项目依赖的版本,而不是全局的,避免版本冲突。
- 不需要全局安装,团队协作更方便。
npx 的特殊能力
- 如果本地没有找到命令,npx 还可以临时下载并执行(但一般不推荐这样用,除非你明确需要)。
3. yarn 的机制
- yarn 也会自动在
node_modules/.bin生成可执行文件。 - 当你用
yarn run xxx时,yarn 会自动把node_modules/.bin加入 PATH 环境变量,确保可以直接调用本地依赖的命令。
总结2:
node_modules/.bin是 npm/yarn 自动生成的可执行文件目录,方便你直接运行依赖包的命令行工具。- npx 会优先使用本地
.bin里的命令,保证项目一致性。 - 这套机制极大地方便了前端工程化和团队协作。
.bin 目录的实际内容
下面详细说明 .bin 目录的实际内容,并演示如何查看和理解它。
1. .bin 目录的作用
node_modules/.bin 目录用于存放所有依赖包(无论是本地依赖还是全局依赖)声明的可执行命令的快捷方式。这样你可以直接在命令行中运行这些工具,而不用写完整路径。
2. 实际内容举例
假设你的项目依赖了 lerna、ts-jest、jest 等包,执行完 npm install 或 yarn install 后,node_modules/.bin 目录下会出现如下内容(以 Windows 为例):
d:\001-study\js\getting-started-example\node_modules\.bin\
│
├── lerna.cmd
├── lerna
├── jest.cmd
├── jest
├── ts-jest.cmd
├── ts-jest
└── ...(其他依赖的可执行文件)
.cmd文件是 Windows 下的批处理脚本,方便在命令行直接调用。

- 没有扩展名的文件是 Unix/Linux 下的可执行软链接或 shell 脚本。.ps1 是 PowerShell 脚本,给 PowerShell 用的。

3. 如何查看 .bin 目录内容
你可以在项目根目录下运行以下命令查看:
dir node_modules\.bin
或者更详细地查看所有文件:
dir node_modules\.bin /a
4. 这些文件的作用
- 这些文件实际上是指向各自依赖包的入口文件(如
node_modules/lerna/cli.js)。 - 当你在命令行输入
lerna或jest时,系统会自动在node_modules/.bin里查找并执行对应的脚本。
5. 关联知识
- 当你用
npx lerna或yarn run lerna时,实际上就是调用了node_modules/.bin/lerna。 - 这样可以保证你用的是本地依赖的版本,而不是全局安装的版本。
相关文章:
npx 的作用以及延伸知识(.bin目录,npm run xx 执行)
文章目录 前言原理解析1. npx 的作用2. 为什么会有 node_modules/.bin/lerna3. npx 的查找顺序4. 执行流程总结1: 1. .bin 机制什么是 node_modules/.bin?例子 2. npx 的底层实现npx 是如何工作的?为什么推荐用 npx?npx 的特殊能力…...
本地部署DeepSeek-R1(Dify升级最新版本、新增插件功能、过滤推理思考过程)
下载最新版本Dify Dify1.0版本之前不支持插件功能,先升级DIfy 下载最新版本,目前1.0.1 Git地址:https://github.com/langgenius/dify/releases/tag/1.0.1 我这里下载到老版本同一个目录并解压 拷贝老数据 需先停用老版本Dify PS D:\D…...
【ubuntu】在Linux Yocto的基础上去适配Ubuntu的wifi模块
一、修改wifi的节点名 1.找到wifi模块的PID和VID ifconfig查看wifi模块网络节点的名字,发现是wlx44876393bb3a(wlxmac地址) 通过udevadm info -a /sys/class/net/wlx44876393bba路径的命令去查看wlx44876393bba的总线号,端口号…...
25软考新版系统分析师怎么备考?重点考哪些?(附新版备考资源)
软考系统分析师(高级资格)考试涉及知识面广、难度较大,需要系统化的复习策略。以下是结合考试大纲和历年真题整理的复习重点及方法: 一、明确考试结构与分值分布 1.综合知识(选择题,75分) 2…...
PyTorch入门------卷积神经网络
前言 参考:神经网络 — PyTorch Tutorials 2.6.0cu124 文档 - PyTorch 深度学习库 一个典型的神经网络训练过程如下: 定义一个包含可学习参数(或权重)的神经网络 遍历输入数据集 将输入通过神经网络处理 计算损失(即…...
Edge浏览器安卓版流畅度与广告拦截功能评测【不卡还净】
安卓设备上使用浏览器的体验,很大程度取决于两个方面。一个是滑动和页面切换时的反应速度,另一个是广告干扰的多少。Edge浏览器的安卓版本在这两方面的表现比较稳定,适合日常使用和内容浏览。 先看流畅度。Edge在中端和高端机型上启动速度快&…...
Docker 和 Docker Compose 使用指南
Docker 和 Docker Compose 使用指南 一、Docker 核心概念 镜像(Image) :应用的静态模板(如 nginx:latest)。容器(Container) :镜像的运行实例。仓库(Registry…...
【设计模式】观察者
观察者模式 1 简介 观察者模式是观察者对象们通过注册到被观察者对象中,从而使被观察者发生变化时能通知到观察者,避免硬编码,使用写死的代码逻辑调用通知,从而实现解耦效果。 2 基本代码逻辑 观察者 class IObserver { publ…...
vue3环境搭建、nodejs22.x安装、yarn 1全局安装、npm切换yarn 1、yarn 1 切换npm
vue3环境搭建 node.js 安装 验证nodejs是否安装成功 # 检测node.js 是否安装成功----cmd命令提示符中执行 node -v npm -v 设置全局安装包保存路径、全局装包缓存路径 在node.js 安装路径下 创建 node_global 和 node_cache # 设置npm全局安装包保存路径(新版本…...
(二十五)安卓开发一个完整的登录页面-支持密码登录和手机验证码登录
下面将详细讲解如何在 Android 中开发一个完整的登录页面,支持密码登录和手机验证码登录。以下是实现过程的详细步骤,从布局设计到逻辑实现,再到用户体验优化,逐步展开。 1. 设计登录页面布局 首先,我们需要设计一个用…...
【java 13天进阶Day05】数据结构,List,Set ,TreeSet集合,Collections工具类
常见的数据结构种类 集合是基于数据结构做出来的,不同的集合底层会采用不同的数据结构。不同的数据结构,功能和作用是不一样的。数据结构: 数据结构指的是数据以什么方式组织在一起。不同的数据结构,增删查的性能是不一样的。不同…...
水污染治理(生物膜+机器学习)
文章目录 **1. 水质监测与污染预测****2. 植物-微生物群落优化****3. 系统设计与运行调控****4. 维护与风险预警****5. 社区参与与政策模拟****挑战与解决思路****未来趋势** 前言: 将机器学习(ML)等人工智能技术融入植树生物膜系统ÿ…...
Python人工智能 使用可视图方法转换时间序列为复杂网络
基于可视图方法的时间序列复杂网络转换实践 引言 在人工智能与数据科学领域,时间序列分析是一项基础且重要的技术。本文将介绍一种创新的时间序列分析方法——可视图方法,该方法能将时间序列转换为复杂网络,从而利用复杂网络理论进行更深入…...
spring:加载配置类
在前面的学习中,通过读取xml文件将类加载,或他通过xml扫描包,将包中的类加载。无论如何都需要通过读取xml才能够进行后续操作。 在此创建配置类。通过对配置类的读取替代xml的功能。 配置类就是Java类,有以下内容需要执行&#…...
使用Pydantic优雅处理几何数据结构 - 前端输入验证实践
使用Pydantic优雅处理几何数据结构 - 前端输入验证实践 一、应用场景解析 在视频分析类项目中,前端常需要传递几何坐标数据。例如智能安防系统中,需要接收: 视频流地址(rtsp_video)检测区域坐标点(point…...
从零搭建一套前端开发环境
一、基础环境搭建 1.NVM(Node Version Manager)安装 简介 nvm(Node Version Manager) 是一个用于管理多个 Node.js 版本的工具,允许开发者在同一台机器上轻松安装、切换和使用不同版本的 Node.js。它特别适合需要同时维护多个项目ÿ…...
金融数据库转型实战读后感
荣幸收到老友太保科技有限公司数智研究院首席专家林春的签名赠书。 这是国内第一本关于OceanBase数据库实际替换过程总结的的实战书。打个比方可以说是从战场上下来分享战斗经验。读后感受颇深。我在这里讲讲我的感受。 第三章中提到的应用改造如何降本。应用改造是国产化替换…...
代码审计系列2:小众cms oldcms
目录 sql注入 1. admin/admin.php Login_check 2. admin/application/label/index.php 3. admin/application/hr/index.php 4. admin/application/feedback/index.php 5. admin/application/article/index.php sql注入 1. admin/admin.php Login_check 先看一下p…...
Cursor + MCP,实现自然语言操作 GitLab 仓库
本分分享如何使用 cursor mcp 来操作极狐GitLab 仓库,体验用自然语言在不接触极狐GitLab 的情况下来完成一些仓库操作。 极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitL…...
Vue el-from的el-form-item v-for循环表单如何校验rules(一)
实际业务需求场景: 新增或编辑页面(基础信息表单,一个数据列表的表单),数据列表里面的表单数是动态添加的。数据可新增、可删除,在表单保存前,常常需要做表单必填项的校验,校验通过以…...
C#集合List<T>与HashSet<T>的区别
在C#中,List和HashSet都是用于存储元素的集合,但它们在内部实现、用途、性能特性以及使用场景上存在一些关键区别。 内部实现 List:基于数组实现的,可以包含重复的元素,并且元素是按照添加的顺序存储的。 HashSet&…...
【Reading Notes】(8.3)Favorite Articles from 2025 March
【March】 雷军一度登顶中国首富,太厉害了(2025年03月02日) 早盘,小米港股一路高歌猛进,暴涨4%,股价直接飙到52港元的历史新高。这一波猛如虎的操作,直接把雷军的身家拉到了2980亿元,…...
Spring Boot 项目里设置默认国区时区,Jave中Date时区配置
在 Spring Boot 项目里设置国区时区(也就是中国标准时间,即 Asia/Shanghai),可通过以下几种方式实现: 方式一:在application.properties或application.yml里设置 application.properties properties sp…...
从PDF到播客:MIT开发的超越NotebookLM的工具
NotebookLM是谷歌推出的更具创意的AI产品之一,几个月前刚刚推出。 许多人对它的能力感到惊叹——尤其是将长文本转化为两位播客主持人之间有趣对话的功能。 NotebookLM提供的不仅仅是这些,还包括聊天(问答)甚至生成思维导图。 如果你还没有尝试过NotebookLM,我强烈建议…...
Kotlin协程Semaphore withPermit约束并发任务数量
Kotlin协程Semaphore withPermit约束并发任务数量 import kotlinx.coroutines.* import kotlinx.coroutines.sync.Semaphore import kotlinx.coroutines.sync.withPermit import kotlinx.coroutines.launch import kotlinx.coroutines.runBlockingfun main() {val permits 1 /…...
Redis的下载安装和使用(超详细)
目录 一、所需的安装包资源小编放下述网盘了,提取码:wshf 二、双击打开文件redis.desktop.manager.exe 三、点击next后,再点击i agree 四、点击箭头指向,选择安装路径,然后点击Install进行安装 五、安装完后依次点…...
Springboot 学习 之 logback-spring.xml 日志打印
文章目录 1. property2. springProperty3. appender4. logger4.1. 通过包路径控制日志4.2. 通过类名控制日志4.3. 按自定义 Logger 名称控制日志 5. root6. springProfile SpringBoot 项目中可以通过自定义 logback-spring.xml 中各项配置,实现日志的打印控制 1. p…...
从游戏显卡到AI引擎:NVIDIA CUDA如何重构计算世界的底层逻辑
当GPU不再是"显卡" 2025年,当ChatGPT-5的万亿参数模型在0.1秒内完成推理时,人们很少意识到,支撑这场智能革命的不仅是算法突破,更是一场持续20年的架构革命。NVIDIA CUDA技术,这个最初被游戏玩家视为"…...
无线网络入侵检测系统实战 | 基于React+Python的可视化安全平台开发详解
随着无线网络的普及,网络攻击风险也日益严峻。本项目旨在构建一个实时监测、智能识别、高效防护的无线网络安全平台,通过结合前后端技术与安全算法,实现对常见攻击行为的有效监控和防御。 一、项目简介与功能目的 本系统是一款基于 React 前…...
前端 实现文字打字效果(仿AI)
DOM结构 <scroll-view class"scroll-view" scroll-y"true" :scroll-top"scrollTop" :style"{height: contentHeight px}"scroll-with-animation show-scrollbar"false" id"report-scroll-view"><view …...
