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.pswp.cn/pingmian/77276.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77276.shtml
英文地址,請注明出處:http://en.pswp.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…