簡體   English   中英

package.json用於全局依賴

[英]package.json for global dependencies

在編寫node.js應用程序時,幾乎總是必須不僅處理本地依賴關系,而且還要處理應用程序所需的全局包。 最好的和常見的解決方法是什么? 我已經看到可以在預安裝階段運行npm

"scripts": {
   "preinstall": "npm i -g grunt-cli"
}

雖然從npm腳本本身運行npm install很奇怪,但是我想這可行。

但是,如果需要安裝多個軟件包,則不是很方便。 是否可以告訴npm從另一個文件(即package.global.json獲取所有列出的軟件包並在全球范圍內安裝它們?

再有,是否有某種約定?

我認為在構建過程中需要全局模塊是代碼的味道 它們工作正常,但它們與npm對抗,因為它們不能直接添加為依賴項。 相反,要使用包含bin腳本的程序包執行,我建議使用package.jsonscripts字段提供一組命令。

例如:

"dependencies": {
    "grunt-cli": "..."
},
"scripts": {
    "start": "grunt server",
    "test": "grunt test"
}

當您運行npm startnpm會自動將grunt-cli模塊的位置添加到PATH ,並執行grunt命令以啟動服務器,然后運行npm test將調用grunt測試運行npm test 這也意味着您有一個非常不錯的地方,讓人們可以立即了解他們可以使用哪些命令,這有助於整個社區保持一致。 注意, starttestnpm中的特殊名稱,因此對於其他任意命令,您需要運行npm run-script <scriptname>

通常,我會遵循以下模式:如果對於模塊的構建和運行至關重要,則不需要全局模塊,但是在需要時可以使用它們來支持增強的工作流程。 這里最主要的是,我將列出絕對關鍵的腳本。 可選地使用全局模塊沒有錯。 例如,您可能有大量的grunt命令,並且無法在package.json列出每個排列,這很好。 對於您的機器,您可以全局安裝grunt-cli以便您可以運行Gruntfile公開的所有命令。

強制全局安裝並不是一個好主意。 您可以只在本地安裝這些軟件包。 全局腳本將在node_modules/.bin文件夾中可用,並且在npm腳本中也將此文件夾添加到路徑中,因此可以使npm run grunt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM