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 installyarn install 后,lerna 的可执行文件就会被自动放到 node_modules/.bin/lerna
  • 这个 .bin 目录是 npm/yarn 的标准机制,用于存放所有依赖包的命令行工具。

3. npx 的查找顺序

  • npx 会先查找本地 node_modules/.bin,如果找不到才会去全局环境查找。
  • 这样可以确保你用到的是当前项目依赖的 lerna 版本,而不是全局安装的版本,保证了版本一致性和可移植性。

4. 执行流程

  1. 你输入 npx lerna run build
  2. npx 查找 node_modules/.bin/lerna
  3. 找到后,直接调用这个本地的 lerna 执行 run build 命令
  4. 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
    1. 当前目录下的 node_modules/.bin
    2. 全局安装的包
  • 找到后,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. 实际内容举例

假设你的项目依赖了 lernats-jestjest 等包,执行完 npm installyarn 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)。
  • 当你在命令行输入 lernajest 时,系统会自动在 node_modules/.bin 里查找并执行对应的脚本。

5. 关联知识

  • 当你用 npx lernayarn run lerna 时,实际上就是调用了 node_modules/.bin/lerna
  • 这样可以保证你用的是本地依赖的版本,而不是全局安装的版本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/77276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【c语言】深入理解指针3——回调函数

一、回调函数 回调函数:通过函数指针调用的函数. 当把一个函数的地址传递给另一个函数,通过该地址去调用其指向的函数,那么这个被调用的函数就是回调函数. 示例: 在【深入理解指针2】中结尾写了用函数指针实现计算器的功能&#…

HTTP 核心概念

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

VidBot:从野外 2D 人体视频中学习可泛化的 3D 动作,实现零样本机器人操控

25年3月来自慕尼黑工大、瑞士 ETH 和微软的论文“VidBot: Learning Generalizable 3D Actions from In-the-Wild 2D Human Videos for Zero-Shot Robotic Manipulation”。 未来的机器人被设想为能够执行各种家务的多功能系统。最大的问题仍然是,如何在尽量减少机器…

Linux 日常运维命令大全

Linux 作为一种开源操作系统,在服务器运维中扮演着重要角色。掌握常用的 Linux 命令对于运维人员而言至关重要。本文将整理一份 Linux 服务器运维常用命令大全,帮助你在日常工作中提高效率和准确性。 1. 基础命令 基础命令是Linux操作的起点&#xff0…

编程规范之枚举

编程规范之枚举 1.1 初始化枚举项 枚举平时用的也没有很频繁,今天看代码规范提到枚举类型初始化枚举项。并对初始化枚举项进行了归纳。包括下面三个 不进行显示初始化,交由编译器完成。 对第一个枚举项的显式初始化,这样可以强制整数值的…

《软件设计师》复习笔记(12.1)——范围管理、进度管理

目录 一、范围管理 1. 核心概念 2. 范围管理过程 WBS(工作分解结构)示例 真题示例: 二、进度管理 1. 核心过程 2. 关键工具与技术 真题示例: 一、范围管理 1. 核心概念 项目范围:为交付产品必须完成的工作…

过去十年前端框架演变与技术驱动因素剖析

一、技术演进脉络(2013-2023) 2013-2015:结构化需求催生框架雏形 早期的jQuery虽然解决了跨浏览器兼容性问题(如IE8兼容性处理),但其松散的代码组织方式难以支撑复杂应用开发。Backbone.js的出现首次引入M…

中华传承-医山命相卜-梅花易数

梅花易数 灵活起卦(如数字、声音、外应等)和象数结合,准确率可达96.8%。其起卦方式摆脱传统龟壳、蓍草的繁琐,强调直觉与灵活性。 个人决策、事件预测等 尤其在短期、具体问题上表现突出。

如何用Brower Use WebUI实现网页数据智能抓取与分析?

作者:算力魔方创始人/英特尔创新大使刘力 Browser-use是一款能让AI智能体像人类一样操作网页的创新工具,与传统网络爬虫技术相比,Browser-use能模拟人浏览并操作网页,在采集网站数据时,不会被网站反爬机制识别和封禁&…

LIMS引领综合质检中心数字化变革,赋能质量强国战略

在质量强国战略的深入推进下,我国综合质检机构迎来了前所未有的发展机遇,同时也面临着诸多严峻挑战。随着检测领域从传统的食品药品监督向环境监测、新材料检测等新兴领域不断拓展,跨领域协同管理的复杂度呈指数级增长。作为提升产品质量的关…

简单好用的在线工具

用AI写了一些在线工具,简介好用,推荐给大家,欢迎大家使用并提议意见。 网址:https://www.bittygarden.com/ 目前已有以下功能: MD5SM3SHAUnicode 编码Unicode 解码Base32 编码Base32 解码Base64 编码Base64 解码URL …

阿里云服务器搭建开源版禅道

一,下载地址:禅道11.5版本发布,主要完善细节,修复bug,新增动态过滤机制 - 禅道下载 - 禅道项目管理软件 下载地址二: 禅道21.6.stable 实现旧编辑器撰写的文档无感升级至新版编辑器 - 禅道下载 - 禅道项目…

leetcode 309. Best Time to Buy and Sell Stock with Cooldown

目录 题目描述 第一步,明确并理解dp数组及下标的含义 第二步,分析并理解递推公式 1.求dp[i][0] 2.求dp[i][1] 3.求dp[i][2] 第三步,理解dp数组如何初始化 第四步,理解遍历顺序 代码 题目描述 这道题与第122题的区别就是卖…

嵌入式硬件常用总线接口知识体系总结和对比

0.前言 在嵌入式工程实现中,多多少少我们都使用过总线,各种各样的总线应用于不同场合,不同场景有不同的优势,但是我们在作为工程师过程中在如何选择项目合适的总线,根据什么来选?需要我们对项目全局和总线特征有所了解,本文目的就是对比多种总线的关键特征 我们在聊到…

数据分析处理库Pandas常用方法汇总

目录 一、基础操作 1.1 创建df对象 1.1.1 读入表格数据 1.1.2 手动创建df 1.2 .info() 1.3 df.index 1.4 df.columns 1.5 df.dtypes 1.6 df.values 1.7 .set_index() 1.8 df[xxx] 1.9 .describe() 1.10 .isin() 1.12 .where() 1.13 .query() 1.14 Series类型运算…

智慧大屏系统

延凡智慧大屏系统旨在打破数据壁垒,将海量、复杂的数据转化为直观易懂的可视化图形和信息,广泛应用于城市管理、企业运营、交通指挥、能源监控等多个领域,为管理者、决策者提供全面、实时、精准的信息展示和分析工具,助力高效决策…

树莓派超全系列教程文档--(32)config.txt常用音频配置

config.txt常用音频配置 板载模拟音频(3.5mm耳机插孔)audio_pwm_modedisable_audio_ditherenable_audio_ditherpwm_sample_bits HDMI音频 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 板载模拟音频(3.5mm耳机…

23种设计模式全面解析

设计模式是解决软件设计中常见问题的经典方案。根据《设计模式:可复用面向对象软件的基础》(GoF),23种设计模式分为以下三类: 一、创建型模式(5种) 目标:解耦对象的创建过程&#x…

AI 推理框架详解,包含如COT、ReAct、LLM+P等的详细说明和分类整理,涵盖其原理、应用场景及对比分析

AI 推理引擎 以下是关于 AI 推理引擎 的详细说明,涵盖其定义、类型、核心组件、技术实现、应用场景及挑战: 1. 推理引擎的定义 推理引擎(Inference Engine)是 AI系统的核心组件,负责根据输入数据、知识库或预训练模…

《探秘鸿蒙分布式软总线:开启无感发现与零等待传输新时代》

在数字化浪潮中,设备之间的互联互通成为构建智能生态的关键。鸿蒙系统中的分布式软总线技术,宛如一座桥梁,让各种智能设备紧密相连。尤其是其实现的设备间无感发现和零等待传输功能,更是为用户带来了前所未有的便捷体验&#xff0…