如果有人不在您的項目的根目錄下運行npm install,那麼所有的依賴關係將安裝在哪裏?
如果你的意思是「哪裏會,如果你在不同的目錄中運行命令他們安裝」,NPM將向上搜索通過父目錄,直到找到package.json
,然後在node_modules
文件夾中安裝的依賴關係在那個文件旁邊。 I.E.他們總是會在項目根目錄中結束。
另外,如果他們選擇通過Github來克隆這個項目呢?無論如何,它會準備好,對吧?那麼在那個時候package.json文件的目的是什麼,除了給用戶關於項目的元數據?
事實並非如此!節點項目幾乎總是有一個.gitignore
文件,它明確排除node_modules
被提交到版本控制,並且期望您在下載源文件後運行npm install
。
有極少數的很好的理由在你的GitHub庫的依賴關係 - 只要項目遵循Semantic Versioning(絕大多數的包做),npm install
會不會導致不兼容的版本被下載,如果你絕對需要要鎖定您的依賴項的版本,您可以使用npm shrinkwrap
。
編輯:馬特的評論非常有益指出,有NPM的幾個功能,超越簡單的元數據 - 一個我可能得到的最用了是Scripts,它允許您創建特定項目的別名命令行操作。
其中這已經派上用場,我正在運行的WebPack開發服務器的一個例子 - 它的本地安裝到我的項目的devDependencies
(你可以做安裝包時使用--save-dev
選項),所以如果我是做手動,我將不得不按以下方式輸入:
"./node_modules/.bin/webpack-dev-server" --inline --hot
這很坦率地說,會有點痛苦。相反,我可以再補充這對我的package.json(注意:node_modules/.bin
被自動添加到系統路徑使用NPM腳本時,所以你不必鍵入每次):
"scripts": {
"dev": "webpack-dev-server --inline --hot"
}
而且那麼我要運行是:
npm run dev
除了這個簡單的用例,也就是一些「特殊」的腳本名稱,這是在特定事件自動調用 - 例如,prepublish
將發佈一個包到之前運行註冊表中。
我想添加[腳本](https://docs.npmjs.com/misc/scripts)和[配置](https://docs.npmjs.com/misc/config)是軟件包的兩個用途。 json超越了簡單的元數據。 – Matt
好點!我會編輯我的答案,詳細說明這些。 –
@JoeClay所以package.json文件對於您在node_modules文件夾中使用軟件包不是必需的,對吧?安裝這些軟件包後,您可以使用npm ___來使用它們。 package.json更適用於腳本,配置和元數據,並且最重要的是幫助其他人稍後安裝項目所需的所有軟件包,因爲這些模塊由於git.ignore文件而不會被上傳 – akantoword