javascript - 為什麼要在dependencies中聲明依賴?
为情所困
为情所困 2017-06-21 10:11:57
0
5
801

看到說--save安裝的模組,會顯示在dependencies中。
並且dependencies中的模組表示生產環境的依賴。如jQuery。

但是我不懂的是,拿jQuery舉例。我為什麼要在dependencies中聲明依賴?
在生產環境中,我會直接用script標籤引用jQuery,根本不需要dependencies。如果在dependencies中聲明了生產環境依賴的模組,會怎麼樣?會自動幫我添加script標籤還是例如模組打包時,打包生產環境模組時會把dependencies中的依賴全部打包進去?但據我所知,例如webpack在模組打包時是根據require的模組創建的依賴圖表來打包的,所以我不太明白為什麼要在dependencies聲明生產環境依賴。

为情所困
为情所困

全部回覆(5)
我想大声告诉你

我們在實際開發中會用到很多模組,有些模組(如,gulp,babel,這些放到devDependencies中)都只是開發環境中用到的,而jquery是用在生產環境中,當你部署專案到生產環境時,執行npm install --production, 只會安裝dependencies中的模組,這樣管理模組就會很方便

Ty80

事實就是那個欄位是設計給 node 的,所以你寫不寫都無所謂。

詳細來說,作為一個前端項目,你的依賴要么進行打包,要么是 script 標籤引入,所以你的 deps 字段裡面有什麼根本不會影響最終的代碼。

Peter_Zhu
  • 如果你用加入模組的話,這個引入JS/CSS的方法本身用不到npm套件管理,可以直接忽略package.json的設定問題

  • 如果你使用如webpack進行打包。 webpack在模組打包時是根據require的模組創建的依賴圖表來打包的,這的確沒錯。但之後還有一步,就是webpack透過依賴圖表來打包的時候,如果依賴圖表裡有jQuery依賴,webpack還是要去找jQuery的文件,然後注入到打包的文件之中。如果你不寫dependencies的話,在團隊開發中,另一個人改了一點程式碼,然後用npm install安裝了依賴包,再重新打包的時候,webpack創建出依賴圖表,依賴圖表中依賴了jQuery,然而webpack在node_modules裡卻找不到要注入到目標檔的jQuery程式碼,這樣他重新打包就會失敗。當然,如果你只有自己一個人開發的話,你可以忽略這一點。

  • 當然,dependencies還有一種應用情況,比如說我之前寫的一個node.js爬蟲。由於這個爬蟲是直接用node運行JS程式碼的,所以我的JS檔案裡面require()的套件都需要寫在dependencies裡,部署的時候用npm install安裝完這些依賴,require才能夠讀取到對應的包。

淡淡烟草味

我覺得你可能是因為需要用webpack去開發頁面,才使用node的。否則你不會去問dependencies和script的關係。這兩者之間毫無關係。

這裡你揉雜了3個東西:

  1. package.json的依賴管理

  2. webpack的依賴管理

  3. html中的腳本引入

 package.json的依賴管理

node不只是可以用來做頁面開發,還可以做很多事情,例如開發伺服器程序,開發JS庫等等。 dependencies記錄並保證你的專案在被使用時的依賴;devDependencies記錄並保證你的專案在被開發時的依賴。

舉一個例子,我們開發一個函式庫,並準備發佈在NPM上。需要使用lodash.sample,開發時使用es6,並且還使用eslint對程式碼風格進行規範。那麼dependencies中就有lodash.sample,devDependencies就有babel和eslint。

dependencies就保證了任何人在install我們這個庫的時候,lodash.sample都會被安裝(否則這個庫將無法正確運行);devDependencies保證任何人在(或者你自己在其他設備上)對這個項目進行修改(開發)時,透過npm install就能取得同樣的開發環境(打包,轉碼嗎,約束,建置等)。想想,如果你在另外一台電腦上,想對開發這個庫的2.0版本,如果沒有devDependencies,你就需要手動的再次安裝babel和eslint等,要不你就要去從最初的專案中copy整個node_modules資料夾。

webpack的依賴管理

webpack是一個建構工具,可以用在頁面的開發中去,也可以用在其他地方。 webpack的依賴管理確實是透過require尋找依賴,它不依賴dependencies。

還是上面函式庫的例子,我們可以用webpack來打包(那devDependencies應該會有webpack)。就算你npm install --save了其他十幾個模組,webpack時,也只會將lodash.sample打進來。

html中的腳本引入

webpack在用來開發頁面時,最先開始是將打包的js文件,手動的在html中以script形式引入,但是後來有插件幫我們自動完成這個過程。後來一些腳手架工具如vue-cli,內建負責的webpack配置,將整個過程最佳化和自動化。加上整個開發過程在node中完成,因此可能導致了你誤以為dependencies和script之間是否有聯繫。

回到你的問題:「為什麼要在dependencies聲明生產環境依賴」

原因是:不記錄這些依賴,其他人(或你自己在其他設備上)進行再開發時,無法知道該專案需要引入哪些依賴,無法進行開發。如果你只是一個人不切換電腦的話,dependencies可以不使用。

淡淡烟草味

工作環境改變的時候,你的專案要是想正常運作。必須聲明依賴,這樣不管在哪裡,只需要一句
npm install即可還原工作環境,依賴什麼的全部解決

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板