理解npm的工作原理:優化你的項目依賴管理流程

目錄

什么是npm

npm核心功能

npm 常用指令及其作用

執行npm i 發生了什么?

1. 解析命令與參數

2. 檢查依賴文件

3. 依賴版本解析與樹構建

4. 緩存檢查與包下載

5. 解壓包到?node_modules

6. 更新?package-lock.json

7. 處理特殊依賴類型

8. 執行生命周期腳本

9. 生成?node_modules/.bin?目錄

10.示例流程

執行npm start 發生了什么?

1. 解析命令與?package.json?查找

2. 執行生命周期鉤子

3. 環境變量與路徑設置

4. 執行用戶定義的腳本

5. 依賴工具鏈的啟動(以 Create React App 為例)

6. 進程管理與信號處理

7. 常見場景與問題

場景 1:啟動一個 Express 服務器

場景 2:啟動前端開發服務器(如 Vue CLI)

常見問題:

8.總結

coress-env

為什么需要 cross-env?

coress-env核心功能

coress-env安裝

coress-env基本用法

coress-env總結

npm、pnpm、yarm、bun、npx的差異

1. 核心定位與關聯性

2. 核心差異對比

3. 命令對比

4. 使用場景示例

npm

pnpm

Yarn

Bun

npx

?5.總結

常用命令行接口

1.基礎操作

2.網絡與端口

3.文件與目錄

4.環境與模式

5.調試與日志

6.依賴管理

7.其他高頻參數

8.總結

script文件解讀

1. 基礎開發命令

2. 測試與代碼質量

3. 鉤子腳本(Hooks)

4. 高級場景

5. 實用工具

6.完整的?package.json?示例


什么是npm

npm(Node Package Manager)?是 JavaScript 的包管理工具,也是 Node.js 的默認包管理器。它用于安裝、共享和管理項目依賴,擁有全球最大的開源庫生態系統之一(npm 官網)

npm核心功能

依賴管理

  • 通過?package.json?文件記錄項目依賴的包及其版本。

  • 自動處理依賴樹,解決版本沖突。

安裝包

  • 本地安裝(項目依賴):
    npm install <package-name>
  • 本地安裝(項目依賴):
    npm install -g <package-name>

發布與共享

開發者可以發布自己的包到 npm 倉庫,供他人使用

"scripts": {"start": "node app.js"
}

npm 常用指令及其作用

指令作用示例
npm init初始化項目,生成?package.json?文件npm init -y(快速生成,跳過提問)
npm install?或?npm i安裝?package.json?中所有依賴npm install
npm install <package>安裝指定包(默認添加到?dependenciesnpm install express
npm install <package> --save-dev?或?npm i <package> -D安裝包并添加到?devDependencies(開發依賴)npm install eslint --save-dev
npm install -g <package>全局安裝包(通常用于命令行工具)npm install -g nodemon
npm uninstall <package>卸載指定包npm uninstall lodash
npm update更新所有依賴到最新版本(遵循?package.json?的版本規則)npm update
npm update <package>更新指定包npm update express
npm outdated檢查過時的依賴包npm outdated
npm list?或?npm ls列出已安裝的依賴樹npm list --depth=0(僅顯示頂層依賴)
npm run <script>運行?package.json?中定義的腳本npm run start
npm start快捷命令,等同于?npm run startnpm start
npm test快捷命令,等同于?npm run testnpm test
npm publish發布包到 npm 倉庫(需登錄)npm publish
npm login登錄 npm 賬號npm login
npm logout退出當前 npm 賬號npm logout
npm search <keyword>搜索 npm 倉庫中的包npm search react
npm view <package>查看包的詳細信息(版本、依賴等)npm view lodash
npm audit檢查依賴中的安全漏洞npm audit
npm audit fix自動修復可修復的安全漏洞npm audit fix
npm cache clean --force清空 npm 緩存(解決安裝問題)npm cache clean --force
npm config set <key> <value>修改 npm 配置(如鏡像源)npm config set registry https://registry.npmmirror.com
npm config get <key>獲取 npm 配置值npm config get registry
npm version <semver>更新項目版本號(遵循語義化版本)npm version patch(更新補丁版本)

關鍵說明

  1. --save-dev?vs 默認安裝

    • 開發工具(如?webpackeslint)用?--save-dev,生產代碼依賴(如?react)直接安裝。

  2. 全局安裝 (-g)

    • 適用于全局命令行工具(如?create-react-app),但需謹慎使用以避免權限問題。

  3. 版本管理

    • package-lock.json?會鎖定依賴版本,確保團隊環境一致,建議提交到版本控制。

執行npm i 發生了什么?

當運行?npm install(或?npm i)時,整個過程可以分解為以下步驟,涵蓋依賴解析、緩存處理、文件操作及生命周期腳本執行:

1. 解析命令與參數

  • 命令類型:根據參數判斷是全局安裝(-g)還是本地安裝(默認)。本地安裝會將依賴寫入?package.json?的?dependencies?或?devDependencies

  • 目標包:若指定了包名(如?npm install lodash),npm 會明確安裝該包;否則安裝?package.json?中聲明的所有依賴。


2. 檢查依賴文件

  • package.json:讀取項目根目錄的?package.json,獲取?dependenciesdevDependenciespeerDependencies?等信息。

  • package-lock.json?或?npm-shrinkwrap.json

    • 若存在,npm 會優先按 lock 文件中的精確版本安裝,確保依賴樹一致。

    • 若不存在,npm 會根據?package.json?中的語義化版本(如?^1.0.0)下載最新兼容版本,并生成新的?package-lock.json


3. 依賴版本解析與樹構建

  • 版本確定

    • 有 lock 文件:直接使用其中指定的版本。

    • 無 lock 文件:根據?package.json?的版本范圍(SemVer)從 registry 獲取最新滿足條件的版本。

  • 依賴樹構建

    • npm 會遞歸分析每個包的依賴,構建完整的依賴樹。

    • 扁平化處理(Dedupe):npm v3+ 采用扁平化結構(hoisting),將可共用的依賴提升到較高層級,減少冗余。若同一包的不同版本無法提升,會嵌套安裝在具體包的?node_modules?下。

    • 沖突處理:當多個包依賴同一包的不同版本時,npm 會盡量選擇兼容版本;若無法解決,則各自安裝所需版本。


4. 緩存檢查與包下載

  • 緩存目錄:npm 會檢查本地緩存(默認位于?~/.npm),通過?integrity?字段(哈希值)驗證包完整性。

    • 緩存命中:直接使用緩存中的包文件,無需下載。

    • 緩存未命中:從配置的 registry(默認?https://registry.npmjs.org/)下載壓縮包(.tgz)。

  • 網絡請求

    • 下載包元數據(metadata)和壓縮包。

    • 支持重試機制和離線模式(--offline)。


5. 解壓包到?node_modules

  • 文件解壓:將下載或緩存的包解壓到項目?node_modules?目錄。

    • 扁平化結構:主依賴放在頂層?node_modules,子依賴盡可能提升以減少嵌套。

    • 符號鏈接(Symlink):對全局安裝的包或?npm link?創建的包,生成符號鏈接。


6. 更新?package-lock.json

  • 鎖定依賴樹:寫入所有依賴及其子依賴的精確版本、下載地址、哈希值,確保后續安裝的一致性。

  • 格式同步:若?package.json?變更(如手動修改版本范圍),npm 會調整?package-lock.json?以保持兼容。


7. 處理特殊依賴類型

  • optionalDependencies:可選依賴安裝失敗不會中斷流程,僅警告。

  • peerDependencies

    • npm v7+:自動安裝 peer 依賴(若未顯式聲明可能引發警告)。

    • 舊版本:僅檢查是否存在,需手動安裝。

  • bundledDependencies:直接包含本地文件,不通過 registry 下載。


8. 執行生命周期腳本

按順序執行包定義的生命周期鉤子:

  1. preinstall:安裝前觸發。

  2. install:包安裝后運行。

  3. postinstall:通常用于編譯原生模塊(如?node-gyp?構建)。

  4. 其他鉤子:如?prepublish(已棄用,改用?prepare)。


9. 生成?node_modules/.bin?目錄

  • 創建可執行文件的快捷方式,使 CLI 工具(如?webpackeslint)可直接通過?npx?或?npm scripts?調用。


10.示例流程

假設運行?npm install lodash

  1. 解析命令,確認安裝?lodash?到?dependencies

  2. 檢查?package-lock.json,若無則向 registry 查詢最新版本。

  3. 下載?lodash.tgz?并驗證哈希。

  4. 解壓到?node_modules/lodash

  5. 更新?package.json?和?package-lock.json

  6. 執行?lodash?的?postinstall?腳本(如果有)。

    執行npm start 發生了什么?

    當你在項目中執行?npm start?時,背后發生了一系列復雜的流程。以下是詳細的分解步驟:

    1. 解析命令與?package.json?查找

    • 命令觸發:輸入?npm start?后,npm CLI 會解析?start?命令。

    • 查找?package.json:npm 會從當前目錄開始向上查找?package.json?文件,直到找到最近的配置文件。

    • 讀取?scripts?字段:在?package.json?的?scripts?對象中查找?start?字段:

      {"scripts": {"start": "node server.js"}
      }
    • 如果未定義?start,npm 會嘗試默認行為:運行?node server.js(若存在該文件)。

    • 如果既沒有定義?start?也沒有?server.js,npm 會報錯?Missing script: "start"

    2. 執行生命周期鉤子

    npm 會按順序觸發與?start?相關的生命周期腳本(如果存在):

    1. prestart:在?start?命令執行前運行。

    2. start:執行用戶定義的腳本。

    3. poststart:在?start?命令執行后運行。

    例如:

    {"scripts": {"prestart": "echo '準備啟動...'","start": "node app.js","poststart": "echo '已啟動!'"}
    }

    執行順序為:prestart?→?start?→?poststart

    3. 環境變量與路徑設置

    npm 在執行腳本時,會為子進程(即腳本運行的進程)設置以下環境變量:

    • PATH?擴展:將項目的?node_modules/.bin?目錄添加到?PATH?中,使得可以直接運行安裝的 CLI 工具(如?webpackreact-scripts)。

    • NODE_ENV?默認值:如果未顯式設置,NODE_ENV?默認為空(但在某些框架如 Create React App 中會強制設置為?development)。

    • 其他 npm 變量:如?npm_package_name(包名)、npm_package_version(版本號)等,可直接在腳本中使用。

    4. 執行用戶定義的腳本

    假設?package.json?中定義如下:

    {"scripts": {"start": "react-scripts start"}
    }

    實際執行流程:

    1. 路徑解析:npm 會在?node_modules/.bin?中查找?react-scripts?可執行文件。

    2. 啟動子進程:通過操作系統的 shell(如 Bash、PowerShell 或 cmd.exe)執行命令。

    3. 參數傳遞:將?start?作為參數傳遞給?react-scripts

    4. 保持進程運行:啟動的進程(如開發服務器)會持續運行,直到手動終止(Ctrl+C)或發生錯誤。

    5. 依賴工具鏈的啟動(以 Create React App 為例)

    以?react-scripts start?為例,詳細流程:

    1. 檢查依賴:確保?webpackbabelwebpack-dev-server?等工具已安裝。

    2. 讀取配置:合并默認配置與項目中的?webpack.config.js(如有覆蓋)。

    3. 啟動開發服務器

      • 監聽文件變化(通過?webpack --watch)。

      • 啟用熱模塊替換(HMR)。

      • 打開瀏覽器(默認?http://localhost:3000)。

    4. 輸出日志:在終端顯示編譯狀態、錯誤或警告信息。


    6. 進程管理與信號處理

    • 保持進程活躍:開發服務器通常是長期運行的進程(如 Express 服務器或前端開發服務器)。

    • 信號處理

      • 按下?Ctrl+C?會發送?SIGINT?信號,終止進程。

      • 進程崩潰時可能觸發?SIGTERM

    • 后臺進程:如果腳本中啟動了守護進程(如?node server.js &),npm 不會自動管理其生命周期。

    7. 常見場景與問題

    場景 1:啟動一個 Express 服務器

    直接運行 server.js,啟動 HTTP 服務并監聽端口。

    {"scripts": {"start": "node server.js"}
    }

    場景 2:啟動前端開發服務器(如 Vue CLI)

    觸發 webpack-dev-server,提供熱重載和代理配置。

    {"scripts": {"start": "vue-cli-service serve"}
    }

    常見問題

    • 權限問題:若腳本需要管理員權限(如監聽 80 端口),需使用?sudo npm start

    • 端口沖突:如果端口被占用,進程會拋出?EADDRINUSE?錯誤。

    • 依賴缺失:未安裝?react-scripts?或?vue-cli-service?會導致命令找不到。

    8.總結

    執行?npm start?的完整流程:

    1. 解析?package.json?中的?scripts.start

    2. 觸發?prestart?鉤子(如果有)。

    3. 設置環境變量并啟動子進程。

    4. 執行用戶定義的命令(如啟動服務器或構建工具)。

    5. 觸發?poststart?鉤子(如果有)。

    6. 保持進程運行直至手動終止。

    coress-env

    cross-env?是一個用于跨平臺設置環境變量的 Node.js 工具。它解決了在不同操作系統(如 Windows 和 Unix 類系統)中設置環境變量語法不一致的問題,使得開發者可以在?package.json?的腳本中統一使用相同的命令。

    為什么需要 cross-env?

    在開發 Node.js 項目時,經常需要在命令行中設置環境變量。例如:

    # Unix 系統(Linux/macOS)
    NODE_ENV=production node app.js# Windows 系統
    set NODE_ENV=production && node app.js

    不同操作系統設置環境變量的語法不同,這會導致以下問題:

    1. 腳本不兼容:在?package.json?的?scripts?中編寫的命令無法跨平臺運行。

    2. 維護成本高:需要為不同操作系統編寫不同的腳本。

    cross-env?通過提供統一的命令格式,屏蔽了操作系統差異,使腳本更具可移植性。

    coress-env核心功能

    1. 跨平臺支持:在 Windows、macOS、Linux 中統一使用相同的命令。

    2. 簡化腳本:無需編寫條件判斷或特定于平臺的語法。

    3. 兼容性:支持所有 Node.js 版本和主流包管理工具(npm、Yarn、pnpm)。

    coress-env安裝

    通過 npm 或 Yarn 安裝為開發依賴:

    npm install --save-dev cross-env
    # 或
    yarn add --dev cross-env

    coress-env基本用法

    在?package.json?的?scripts?中使用?cross-env?設置環境變量:

    示例 1:設置?NODE_ENV

    {"scripts": {"build": "cross-env NODE_ENV=production webpack","start": "cross-env NODE_ENV=development node server.js"}
    }

    示例 2:傳遞多個環境變量

    {"scripts": {"test": "cross-env API_URL=http://localhost:3000 DEBUG=true mocha"}
    }

    示例 3:處理帶空格的值(需用引號包裹)

    {"scripts": {"run:app": "cross-env GREETING=\"Hello World\" node app.js"}
    }

    coress-env總結

    cross-env?是解決跨平臺環境變量設置問題的輕量級工具,通過統一命令語法:

    • 消除 Windows 和 Unix 系統間的腳本差異。

    • 簡化?package.json?的維護。

    • 提升開發體驗和團隊協作效率。

    npm、pnpm、yarm、bun、npx的差異

    1. 核心定位與關聯性

    工具定位關聯性
    npmNode.js 默認包管理器所有工具的基礎,定義?package.json?規范,其他工具均兼容 npm 生態。
    pnpm高效磁盤存儲包管理器兼容 npm 命令和?package.json,通過硬鏈接和符號鏈接優化依賴存儲。
    Yarn改進版包管理器最初為解決 npm 性能問題而生,兼容 npm 生態,提供更嚴格的依賴鎖定機制。
    Bun全棧運行時與包管理器兼容 npm 和 Yarn 命令,內置超快包管理、測試、腳本運行等功能。
    npx臨時執行包命令工具隨 npm 5.2+ 內置,用于直接運行本地或遠程包的可執行文件。

    2. 核心差異對比

    特性npmpnpmYarnBunnpx
    安裝方式嵌套存儲依賴全局存儲 + 硬鏈接扁平化存儲全局緩存 + 并行安裝不安裝(直接執行)
    依賴存儲node_modules?冗余單一全局存儲 + 符號鏈接扁平化?node_modules全局緩存 + 符號鏈接
    安裝速度較慢極快(Rust 實現)快速(僅下載臨時包)
    磁盤占用低(共享依賴)中等
    Lock 文件package-lock.jsonpnpm-lock.yamlyarn.lockbun.lockb
    工作區支持需要手動配置內置內置內置
    兼容性Node.js 標準完全兼容 npm兼容 npm兼容 npm/Yarn依賴 npm
    核心優勢官方默認節省磁盤空間穩定可靠極速全棧工具鏈臨時運行命令
    缺點依賴冗余、速度慢生態兼容性偶發問題配置復雜度較高新工具生態待完善無法管理長期依賴

    3. 命令對比

    操作npmpnpmYarnBunnpx
    初始化項目npm initpnpm inityarn initbun init-
    安裝依賴npm installpnpm installyarn installbun install-
    添加生產依賴npm add lodashpnpm add lodashyarn add lodashbun add lodash-
    添加開發依賴npm add -D eslintpnpm add -D eslintyarn add -D eslintbun add -d eslint-
    全局安裝npm install -g tscpnpm add -g tscyarn global add tscbun add -g tsc-
    運行腳本npm run devpnpm run devyarn devbun run dev-
    臨時執行命令npx create-react-apppnpm dlx create-react-appyarn dlx create-react-appbunx create-react-appnpx create-react-app

    4. 使用場景示例

    npm

    • 場景:新項目默認使用,或需要與舊項目兼容。

    • 示例

      npm init -y
      npm install express
      npm run start

    pnpm

    • 場景:需節省磁盤空間(如 Monorepo 項目),或依賴版本沖突頻繁。

    • 示例

      pnpm add react@18
      pnpm run build

    Yarn

    • 場景:需要嚴格依賴鎖定或使用 Yarn Workspaces。

    • 示例

      yarn add lodash --immutable
      yarn workspace frontend dev

    Bun

    • 場景:追求極速安裝和全棧工具鏈(如同時管理 JS/TS 和 SQLite)。

    • 示例

      bun install
      bun test
      bun run dev

    npx

    • 場景:臨時運行腳手架工具或 CLI 命令。

    • 示例

      npx create-next-app@latest
      npx http-server ./dist

    ?5.總結

    • npm:基礎工具,適合大多數項目。

    • pnpm:適合磁盤敏感或依賴沖突多的場景。

    • Yarn:適合需要穩定鎖文件或復雜 Monorepo。

    • Bun:適合追求速度和全棧能力的新項目。

    • npx:適合臨時運行一次性命令。

    常用命令行接口

    以下是常見的命令行接口(CLI)選項列表,涵蓋開發、工具鏈和服務器場景中的高頻參數及其用途:

    1.基礎操作

    參數用途示例
    --help?/?-h顯示幫助信息(命令用法和選項說明)npm run build --help
    --version?/?-V顯示工具或應用的版本號node --version
    --verbose輸出詳細日志(調試時使用)webpack --verbose
    --silent靜默模式(減少日志輸出)npm install --silent
    --dry-run模擬執行,不實際執行操作(測試命令效果)npm publish --dry-run

    2.網絡與端口

    參數用途示例
    --port?/?-p指定服務監聽的端口號next dev --port 8080
    --host指定服務綁定的主機(如?0.0.0.0?允許外部訪問)vite --host 0.0.0.0
    --open?/?-o啟動后自動打開瀏覽器create-react-app --open
    --proxy設置代理服務器地址webpack-dev-server --proxy http://api.example.com

    3.文件與目錄

    參數用途示例
    --config?/?-c指定配置文件路徑eslint --config .eslintrc.cjs
    --output?/?-o指定輸出目錄或文件tsc --outDir dist
    --watch?/?-w監視文件變化并自動重新執行nodemon --watch src
    --force強制覆蓋文件或跳過安全檢查rm -rf --force node_modules

    4.環境與模式

    參數用途示例
    --mode設置運行模式(如?development/productionvite build --mode production
    --env注入環境變量webpack --env NODE_ENV=prod
    --production標記為生產環境(安裝依賴時跳過?devDependenciesnpm install --production

    5.調試與日志

    參數用途示例
    --debug啟用調試模式(輸出額外信息)node --debug app.js
    --inspect啟用 Node.js 調試器(配合 Chrome DevTools)node --inspect server.js
    --log-level設置日志級別(如?error,?warn,?infonpm install --log-level warn

    6.依賴管理

    參數用途示例
    --save?/?-S將依賴添加到?dependencies(默認行為)npm install lodash --save
    --save-dev?/?-D將依賴添加到?devDependenciesnpm install eslint --save-dev
    --global?/?-g全局安裝包(系統級可用)npm install http-server -g

    7.其他高頻參數

    參數用途示例
    --yes?/?-y自動確認所有提示(非交互模式)npm init -y
    --ignore-scripts跳過包安裝時的生命周期腳本執行npm install --ignore-scripts
    --timeout設置超時時間(如網絡請求超時)curl --timeout 5000 URL
    --no-optional跳過安裝?optionalDependencies?中的依賴npm install --no-optional

    8.總結

    • 通用性:大部分工具支持?--help?和?--version,是快速查閱文檔的入口。

    • 組合使用:參數可組合(如?npm run dev -- --port 3000 --open)。

    • 工具差異:不同工具可能有特定參數(如?vite --strictPort?強制端口占用檢查)。

    • 最佳實踐:具體參數以工具文檔為準,使用前建議通過?--help?驗證。

    script文件解讀

    1. 基礎開發命令

    Key用途工具示例
    start啟動本地開發服務器(如 React、Next.js 項目)react-scripts start
    dev開發模式(常見于 Vite、Nuxt.js 項目)vite
    serve啟動開發服務器(Vue CLI 項目)vue-cli-service serve
    build構建生產環境代碼(壓縮、打包、優化)vite build
    preview本地預覽生產構建結果(Vite 特有)vite preview

    2. 測試與代碼質量

    Key用途工具示例
    test運行單元測試jest
    test:watch監聽文件變化自動運行測試jest --watch
    lint靜態代碼檢查(檢查語法、風格問題)eslint
    lint:fix自動修復可修復的代碼規范問題eslint --fix
    format代碼格式化(統一縮進、引號等風格)prettier --write
    typecheckTypeScript 類型檢查(不生成文件)tsc --noEmit

    3. 鉤子腳本(Hooks)

    Key用途示例場景
    pre[start]在?start?命令前執行(如?prestart類型檢查、環境準備
    post[build]在?build?命令后執行(如?postbuild分析構建結果、清理臨時文件
    pre[test]在?test?命令前執行(如?pretest先運行代碼檢查

    4. 高級場景

    Key用途工具示例
    analyze分析構建產物體積(查看哪些模塊占用較大)source-map-explorer
    storybook啟動組件開發環境(Storybook)start-storybook
    deploy部署到靜態托管平臺(如 GitHub Pages、Vercel)gh-pages
    docker:build構建 Docker 鏡像docker build
    docker:run運行 Docker 容器docker run

    5. 實用工具

    Key用途工具示例
    clean清理構建產物或臨時文件(如?distnode_modulesrimraf
    prepare在?npm install?后自動執行(常用于安裝 Git 鉤子)husky install

    6.完整的?package.json?示例

    {"name": "my-project","version": "1.0.0","scripts": {// --- 基礎命令 ---"start": "react-scripts start",          // 啟動開發服務器"dev": "vite",                           // 開發模式(Vite)"serve": "vue-cli-service serve",        // 啟動開發服務器(Vue CLI)"build": "vite build",                   // 構建生產環境代碼"preview": "vite preview",               // 預覽生產構建結果"test": "jest --coverage",               // 運行測試(Jest)"test:watch": "jest --watch",            // 監聽文件變化運行測試"lint": "eslint . --ext .js,.ts",        // 代碼規范檢查(ESLint)"lint:fix": "eslint . --fix",            // 自動修復代碼規范問題"format": "prettier --write .",          // 代碼格式化(Prettier)"typecheck": "tsc --noEmit",             // TypeScript 類型檢查"prepare": "husky install",              // 安裝 Git 鉤子(Husky)"clean": "rimraf dist node_modules",     // 清理構建產物和依賴// --- 鉤子腳本 ---"prestart": "npm run typecheck",         // 在 `start` 前執行"postbuild": "npm run analyze",          // 在 `build` 后執行"pretest": "npm run lint",               // 在 `test` 前執行// --- 高級場景 ---"analyze": "source-map-explorer dist/*.js",    // 分析構建包體積"storybook": "start-storybook -p 6006",  // 啟動 Storybook"deploy": "gh-pages -d dist",            // 部署到 GitHub Pages"docker:build": "docker build -t my-app .",    // 構建 Docker 鏡像"docker:run": "docker run -p 8080:80 my-app"  // 運行 Docker 容器},"dependencies": {// 依賴項...},"devDependencies": {// 開發依賴項...}
    }

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/news/902721.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/news/902721.shtml
    英文地址,請注明出處:http://en.pswp.cn/news/902721.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    React Native 安卓端 android Image 播放gif webp 動態圖

    React Native 安卓端 android Image 播放gif webp 動態圖 RN項目是0.78.2 React是19.0 基本介紹 Image 是 React Native 中用于顯示各種類型圖片的核心組件&#xff0c;支持顯示網絡圖片、靜態資源、本地圖片以及 base64 編碼的圖片。在 Android 端&#xff0c;Image 組件還可…

    實時數字人——DH_LIVE

    前兩天親手搭建了實時對話數字人VideoChat&#xff0c;今天來搭建下DH_LIVE。 DH_LIVE一個實時數字人解決方案&#xff0c;從輸入文字到數字人對口型說話用時2-3秒。 今天就來實際操作下dh_live的搭建過程。 首先貼上git地址&#xff1a;https://github.com/kleinlee/DH_liv…

    AOSP CachedAppOptimizer 凍結方案

    背景 Android 一直面臨一個核心難題&#xff1a;如何優化進程對有限系統資源&#xff08;如 CPU、電量&#xff09;的使用&#xff0c;同時保證用戶體驗。 當進程進入后臺后&#xff0c;它們雖不再貢獻用戶體驗&#xff0c;卻仍可能消耗資源。傳統的殺后臺方案雖然節省資源&a…

    實體店的小程序轉型之路:擁抱新零售的密碼-中小企實戰運營和營銷工作室博客

    實體店的小程序轉型之路&#xff1a;擁抱新零售的密碼-中小企實戰運營和營銷工作室博客 在當今數字化浪潮的沖擊下&#xff0c;實體店面臨著前所未有的挑戰&#xff0c;但小程序的出現為實體店轉型新零售帶來了新的曙光。先來看一組驚人的數據&#xff0c;據相關統計&#xff…

    Java求職面試:從Spring Boot到微服務的全面考核

    Java求職面試實錄&#xff1a;從Spring Boot到微服務的全面考核 第一輪&#xff1a;基礎技術的考察 場景&#xff1a; 趙大寶走進了一家互聯網大廠的面試間&#xff0c;面試官嚴肅地看著他。 面試官&#xff1a; 趙大寶&#xff0c;你好。我們先從簡單的開始。請你解釋一下J…

    記錄一個坑關于STM32 ARM Compiler Version

    在用 Keil 進行 STM32 開發的時候&#xff0c;一開始下載&#xff0c;下載的 ARM 編譯器是 Version6&#xff0c;他就不兼容老的代碼&#xff0c;就很抽象。 所以必須要更換編譯器。 可以去官網下載編譯器 Downloads - Arm Developer &#xff0c;也可以自己找資源哈&#xff…

    PCIe體系結構學習入門——PCI總線概述(二)PCI總線的橋和配置

    這里寫目錄標題 序言存儲器域和 PCI 總線域HOST 主橋PCI 橋和 PCI 設備配置空間PCI 橋PCI 設備配置空間PCI 總線的配置非透明 PCI 橋序言 接續前章內容,本章繼續講述 PCI 總線概述的第二部分——PCI 總線的橋和配置。 如果需要進一步了解前一章節內容,可以訪問:PCIe體系結構…

    潯川代碼編輯器v2.0(測試版)更新公告

    潯川代碼編輯器v2.0(測試版)更新公告 發布日期&#xff1a;** 2023年4月30日 我們很高興地宣布潯川代碼編輯器v2.0測試版即將上線&#xff01;本次更新帶來了多項功能改進和問題修復&#xff0c;旨在為用戶提供更穩定、更強大的編程體驗。 主要更新內容 1. **Bug修復與穩定性提…

    微信小程序 tabbar底部導航欄

    官方文檔&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#tabBar 一、常規菜單格式 在app.json 文件中配置&#xff0c;其他關鍵點詳見官方文檔&#xff0c;后續更新不規則圖標的寫法

    Spring 中@Autowired,@Resource,@Inject 注解實現原理

    使用案例 前置條件&#xff1a; 現在有一個 Vehicle 接口&#xff0c;它有兩個實現類 Bus 和 Car &#xff0c;現在還有一個類 VehicleService 需要注入一個 Vehicle 類型的 Bean&#xff1a; public interface Vehicle {}Component public class Car implements Vehicle {}C…

    【Rust結構體】Rust結構體詳解:從基礎到高級應用

    ?? 歡迎大家來到景天科技苑?? &#x1f388;&#x1f388; 養成好習慣&#xff0c;先贊后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者簡介&#xff1a;景天科技苑 &#x1f3c6;《頭銜》&#xff1a;大廠架構師&#xff0c;華為云開發者社區專家博主&#xff0c;…

    《LightLLM:開啟大語言模型推理新時代》

    《LightLLM:開啟大語言模型推理新時代》 大語言模型推理的困境與挑戰 在當今人工智能飛速發展的時代,大語言模型(LLMs)無疑是最為耀眼的明星技術之一。從 OpenAI 的 GPT 系列到谷歌的 BERT,再到國內如百度文心一言、阿里通義千問等,大語言模型以其強大的語言理解和生成能…

    【Python Web開發】02-Socket網絡編程02

    文章目錄 1. 服務器端1.1 socket.socket()1.2 socket.bind()1.3 socket.listen()1.4 socket.accept()1.5 socket.recv()1.6 socket.send() 和 socket.sendall()1.7 socket.close() 2. 客戶端2.1 socket.socket()2.2 socket.connect()2.3 socket.send() 和 socket.sendall()2.4 …

    Flutter 在全新 Platform 和 UI 線程合并后,出現了什么大坑和變化?

    Flutter 在全新 Platform 和 UI 線程合并后&#xff0c;出現了什么大坑和變化&#xff1f; 在兩個月前&#xff0c;我們就聊過 3.29 上《Platform 和 UI 線程合并》的具體原因和實現方式&#xff0c;而事實上 Platform 和 UI 線程合并&#xff0c;確實為后續原生語言和 Dart 的…

    藍橋杯 1. 四平方和

    四平方和 原題目鏈接 題目描述 四平方和定理&#xff08;又稱拉格朗日定理&#xff09;指出&#xff1a; 每個正整數都可以表示為 至多 4 個正整數的平方和。 如果將 0 包括進去&#xff0c;則每個正整數都可以恰好表示為 4 個非負整數的平方和。 例如&#xff1a; 5 0 …

    開發并發布一個屬于自己的包(npm)

    一、CommonJS規范導入require 創建一個npm包涉及幾個步驟&#xff0c;包括設置你的項目結構、編寫代碼、編寫文檔、測試你的代碼&#xff0c;以及發布到npm倉庫。以下是一個基本的指南&#xff0c;幫助你從頭開始創建一個npm包。 步驟 1: 初始化npm項目 創建項目文件夾&#x…

    CRTP(Curiously Recurring Template Pattern)

    C 中的 CRTP&#xff08;奇異遞歸模板模式&#xff09; CRTP&#xff08;Curiously Recurring Template Pattern&#xff09;是一種利用模板繼承實現 靜態多態&#xff08;Static Polymorphism&#xff09; 的設計模式。通過基類模板以派生類作為模板參數&#xff0c;CRTP 允許…

    小白工具視頻轉MPG, 功能豐富齊全,無需下載軟件,在線使用,超實用

    在視頻格式轉換需求日益多樣的今天&#xff0c;小白工具網的在線視頻轉 MPG 功能https://www.xiaobaitool.net/videos/convert-to-mpg/ &#xff09;脫穎而出&#xff0c;憑借其出色特性&#xff0c;成為眾多用戶處理視頻格式轉換的優質選擇。 從格式兼容性來看&#xff0c;它支…

    銀河麒麟系統離線安裝nodejs

    本篇文章我們介紹如何通過nvm(node版本管理工具)來實現離線安裝nodejs 第一步&#xff1a;下載nvm https://github.com/nvm-sh/nvm/releases/tag/v0.40.1 在頁面找到【Source code(tar.gz)】下載 第二步&#xff1a;安裝nvm 將下載好的tar.gz拷貝到銀河麒麟系統文件夾下(加…

    Go語言中包導入下劃線的作用解析

    在Go語言的代碼中&#xff0c;有時會看到類似以下的導入語句&#xff1a; import _ "github.com/mattn/go-sqlite3"這種以下劃線_開頭的導入方式&#xff0c;顯得有些特別&#xff0c;尤其是對于新手來說&#xff0c;可能會感到困惑&#xff0c;為什么要這樣寫&…