npm 工作區(qū) workspaces

2021-10-29 10:53 更新

使用工作區(qū)工作

描述

工作區(qū)(workspaces)是一個(gè)通用術(shù)語,指的是 npm cli 中的一組功能,它支持從單個(gè)頂級(jí)根包中管理本地文件系統(tǒng)中的多個(gè)包。

這組功能彌補(bǔ)了從本地文件系統(tǒng)處理鏈接包的更加簡(jiǎn)化的工作流程。自動(dòng)化鏈接過程作為一部分,npm install避免手動(dòng)使用npm link以添加對(duì)應(yīng)符號(hào)鏈接到當(dāng)前node_modules文件夾的包的引用?。

我們還將這些包在npm install作為單個(gè)工作區(qū)期間自動(dòng)符號(hào)鏈接,這意味著它是當(dāng)前本地文件系統(tǒng)中的嵌套包,在配置中明確定義。package.json?workspaces

定義工作區(qū)

工作區(qū)通常通過package.json文件的workspaces屬性定義,例如:

{
  "name" : "my-workspaces-powered-project" , 
  "workspaces" :[
    "workspapce-a"
  ]
}

鑒于上面的package.json示例位于當(dāng)前工作目錄中.,該目錄包含一個(gè)名為的文件夾,該文件夾workspace-a本身包含一個(gè)package.json內(nèi)部,定義一個(gè) Node.js 包,例如:

.
+-- package.json
`--workspace-a
   `--package.json

一旦npm install在當(dāng)前工作目錄中運(yùn)行,預(yù)期的結(jié)果.是該文件夾workspace-a將被符號(hào)鏈接到node_modules當(dāng)前工作目錄的?文件夾。 下面 是一個(gè) postnpm install示例,考慮到與之前的文件和文件夾的示例結(jié)構(gòu)相同:

.
+-- node_modules
| `-- wrokspace-a -> ../workspace-a
+-- package-lock.json
+-- package.json
`--workspace-a
   `--package.json

開始使用工作區(qū)

你可以使用npm init自動(dòng)執(zhí)行定義新工作區(qū)所需的步驟?。例如,在一個(gè)已經(jīng)package.json定義好的項(xiàng)目中,你可以運(yùn)行:

npm init -w ./packages/a

此命令將創(chuàng)建丟失的文件夾和一個(gè)新package.json?文件(如果需要),同時(shí)確保正確配置根項(xiàng)目package.json"workspaces"屬性。

向工作區(qū)添加依賴項(xiàng)

可以使用workspaceconfig直接添加/刪除/更新工作區(qū)的依賴項(xiàng)。

例如,假設(shè)以下結(jié)構(gòu):

.
+-- package.json
`-- package
   +--a
   | `--package.json
   `--b
       `--package.json

如果要將abbrev注冊(cè)表中命名的依賴項(xiàng)添加為工作區(qū)a的依賴項(xiàng),則可以使用工作區(qū)配置來告訴 npm 安裝程序應(yīng)將包添加為提供的工作區(qū)的依賴項(xiàng):

npm 安裝縮寫 -wa

注:其他安裝命令,例如uninstall,ci等也會(huì)尊重提供workspace配置。

使用工作區(qū)

鑒于Node.js 如何處理模塊解析的特殊性,可以通過它的聲明來使用任何定義的工作區(qū)package.json?name。繼續(xù)上面定義的示例,讓我們還創(chuàng)建一個(gè)需要workspace-a?示例模塊的 Node.js 腳本,例如:

// ./workspace-a/index.js
module.exports = 'a'


// ./lib/index.js
const moduleA = require('workspace-a')
console.log(moduleA) // -> a

運(yùn)行時(shí):

node lib/index.js

這演示了node_modules分辨率的性質(zhì)如何允許?工作區(qū)啟用可移植的工作流,以要求每個(gè)工作區(qū)?以這樣一種方式也很容易發(fā)布這些嵌套的工作區(qū)以供其他地方使用。

在工作區(qū)上下文中運(yùn)行命令

你可以使用workspace配置選項(xiàng)在已配置工作區(qū)的上下文中運(yùn)行命令。

以下是有關(guān)如何npm run在嵌套工作區(qū)上下文中使用該命令的快速示例。對(duì)于包含多個(gè)工作區(qū)的項(xiàng)目,例如:

.
+-- package.json
`-- package
   +--a
   | `--package.json
   `--b
       `--package.json

通過使用該workspace選項(xiàng)運(yùn)行命令,可以在該特定工作區(qū)的上下文中運(yùn)行給定的命令。例如:

npm run test --workspace=a

這將運(yùn)行文件中test定義的腳本?./packages/a/package.json。

請(qǐng)注意,你還可以在命令行中多次指定此參數(shù)以定位多個(gè)工作區(qū),例如:

npm run test --workspace=a --workspace=b

也可以使用workspaces(復(fù)數(shù))配置選項(xiàng)來啟用相同的行為,但在所有?配置的工作區(qū)的上下文中運(yùn)行該命令。例如:

npm run test --workspaces

test./packages/a和 中運(yùn)行腳本./packages/b。

忽略丟失的腳本

并非所有工作區(qū)都需要實(shí)現(xiàn)使用該npm run命令運(yùn)行的腳本。

通過運(yùn)行帶有--if-present標(biāo)志的命令,npm 將忽略缺少目標(biāo)腳本的工作區(qū)。

npm run test --workspaces --if-present
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)