2016-03-26 63 views
3

我從here讀取,在文件的package.json的依賴讓人們,如果他們通過NPM-NPM package.json文件的主要用途是什麼?

最後安裝項目中安裝的依賴,依賴字段被用來列出所有的依賴 您項目在npm上可用。當有人通過npm安裝 項目時,列出的所有依賴項將安裝爲 。此外,如果某人在項目的根目錄 中運行npm install,它將將所有依賴項安裝到 ./node_modules。

如果有人沒有在項目的根目錄下運行npm install,那麼所有的依賴關係將安裝在哪裏?

另外,如果他們選擇通過Github來克隆這個項目呢?無論如何,它會準備好,對吧?那麼在那個時候package.json文件的目的是什麼,除了給用戶關於項目的元數據?

回答

5

如果有人不在您的項目的根目錄下運行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將發佈一個包到之前運行註冊表中。

+1

我想添加[腳本](https://docs.npmjs.com/misc/scripts)和[配置](https://docs.npmjs.com/misc/config)是軟件包的兩個用途。 json超越了簡單的元數據。 – Matt

+0

好點!我會編輯我的答案,詳細說明這些。 –

+0

@JoeClay所以package.json文件對於您在node_modules文件夾中使用軟件包不是必需的,對吧?安裝這些軟件包後,您可以使用npm ___來使用它們。 package.json更適用於腳本,配置和元數據,並且最重要的是幫助其他人稍後安裝項目所需的所有軟件包,因爲這些模塊由於git.ignore文件而不會被上傳 – akantoword