發(fā)布于:2021-01-15 09:36:38
0
141
0
如今,大多數(shù)前端項(xiàng)目將涉及某種NPM軟件包。有時(shí),在瀏覽這些軟件包的文檔時(shí),我會(huì)看到建議安裝這樣的軟件包。
yarn global add <package>
或像這樣。
npm install --global <package>
在這兩個(gè)示例中,軟件包都是全局安裝的。這意味著您可以<package>從系統(tǒng)上的任何目錄運(yùn)行命令。
這是可行的,但是全局安裝軟件包有一些缺點(diǎn)。
如果您與一組開(kāi)發(fā)人員一起工作,則很難保證每個(gè)人都在運(yùn)行相同的程序包。
全局只能安裝一個(gè)版本。如果您有依賴(lài)于包的不同版本的不同項(xiàng)目,這將導(dǎo)致問(wèn)題。
在本文中,我將向您展示三種不同的方法,您可以使用這些方法來(lái)運(yùn)行軟件包,而不必全局安裝它們。
快速設(shè)置
在本文中,我們將安裝一個(gè)名為Figlet的小型CLI工具,該工具可打印ASCII藝術(shù)文字。創(chuàng)建一個(gè)空目錄并導(dǎo)航到該目錄。然后添加以下package.json文件:
{ "name": "example", "license": "UNLICENSED", "dependencies": { "figlet-cli": "^0.1.0" } }
運(yùn)行yarn install或npm install(根據(jù)您的喜好)安裝軟件包。
注意:從現(xiàn)在開(kāi)始,yarnandnpm命令完全相同,因此我僅列出yarn版本。
編輯$ PATH
像本地安裝軟件包一樣運(yùn)行本地安裝軟件包的第一種方法是編輯$PATH環(huán)境變量。該$PATH變量告訴您的系統(tǒng)在哪個(gè)目錄中查找可執(zhí)行文件。
Yarn和NPM的便捷功能之一是它們都包含一個(gè).bin目錄,node_modules該目錄中包含指向所有已安裝的可執(zhí)行文件的符號(hào)鏈接。您可以輕松地將此文件夾添加到您的路徑。這里的竅門(mén)是修改您的目錄$PATH以包含本地 node_modules/.bin目錄。這將使您可以運(yùn)行任何本地NPM CLI工具,就好像它是全局安裝的一樣。
首先,您需要確定正在運(yùn)行哪個(gè)shell。為此,您可以在CLI中鍵入以下內(nèi)容。
echo $SHELL
如果您尚未配置自定義外殼,則可能為zsh或bash。如果是bash,請(qǐng)打開(kāi)~/.bash_profile文件。如果是zsh,請(qǐng)打開(kāi)~/.zshenv。如果所需文件不存在,請(qǐng)創(chuàng)建它。
接下來(lái),將以下內(nèi)容添加到底部。請(qǐng)注意,這./node_modules/.bin是相對(duì)路徑。這意味著它將被附加到您當(dāng)前所在的任何目錄中。
export PATH="./node_modules/.bin:$PATH"
就是這樣!重新啟動(dòng)外殼程序,導(dǎo)航到創(chuàng)建的目錄,然后嘗試運(yùn)行figlet。
figlet Aww yeah
你應(yīng)該看到這樣的東西。很整潔的,對(duì)吧?
_ __ __ _ / __ ____ __ / /__ __ _| |__ / _ / / / / / / V / _ / _` | '_ / ___ V V / V V / | | __/ (_| | | | | /_/ __/_/ _/_/ |_|___|__,_|_| |_|
紗線(xiàn)運(yùn)行工具
接下來(lái)是在中定義命令package.json。要添加命令,您要做的就是添加一個(gè)scripts部分,其中包含您的命令名稱(chēng)和您要運(yùn)行的內(nèi)容。在此示例中,我添加了一個(gè)aww-yeah命令。
{ "name": "example", "license": "UNLICENSED", "dependencies": { "figlet-cli": "^0.1.0" }, "scripts": { "aww-yeah": "figlet Aww Yeah" } }
您可以使用運(yùn)行自定義命令yarn run <command>。大多數(shù)命令也可以縮短為yarn <command>。嘗試一下yarn aww-yeah!
您甚至可以將參數(shù)傳遞給自定義命令。嘗試將ascii下面列出的命令添加到 scripts并運(yùn)行yarn ascii Aww Yeah。
"scripts": { "aww-yeah": "figlet Aww Yeah", "ascii": "figlet" }
這是一個(gè)真實(shí)的例子。我是ESLint和Jest的忠實(shí)擁護(hù)者。我的幾乎所有項(xiàng)目都在其中定義了這些命令。
"scripts": { "lint": "eslint --max-warnings=0 .", "test": "jest" }
這很棒,因?yàn)槲液臀业膱F(tuán)隊(duì)都可以共享這些命令。它們也是自我記錄的,因此,如果某人是某個(gè)軟件包的新手,他們可以瀏覽一下package.json以查看可用的命令。
NPX
最后,我們有NPX,它是NPM的打包程序。這個(gè)方便的工具使您可以運(yùn)行CLI命令,而無(wú)需在本地安裝軟件包。這對(duì)于只需要運(yùn)行一次的工具(例如生成器)非常有用。
如果已安裝Node.js,則可能已在您的計(jì)算機(jī)上安裝了NPX。如果沒(méi)有,您可以使用進(jìn)行全局安裝yarn global add npx。
讓我們?cè)囈幌耭iglet。
npx figlet Aww Yeah
那不是那么容易嗎?
有時(shí),您會(huì)遇到NPX不知道如何查找的命令。我的Yeoman Generators存儲(chǔ)庫(kù)就是一個(gè)例子。在這種情況下,您需要通過(guò)-p標(biāo)記來(lái)告訴NPX哪個(gè)程序包顯式運(yùn)行。
npx -p yo -p @landonschropp/generator-eslint yo @landonschropp/eslint
全部完成!
這就是結(jié)果?,F(xiàn)在,你可以在本地安裝任何NPM模塊,并像運(yùn)行全局模塊一樣運(yùn)行該命令。我個(gè)人經(jīng)常使用這三種方法。我希望你會(huì)發(fā)現(xiàn)它們像我一樣有用!
作者介紹
熱門(mén)博客推薦