W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
使用工作區(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ū)通常通過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
你可以使用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"
屬性。
可以使用workspace
config直接添加/刪除/更新工作區(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
配置。
鑒于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ū)以供其他地方使用。
你可以使用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
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: