javascript - 為什么要在dependencies中聲明依賴?
問題描述
看到說--save安裝的模塊,會顯示在dependencies中。并且dependencies中的模塊表示生產環境的依賴。比如jQuery。
但是我不懂的是,拿jQuery舉例。我為什么要在dependencies中聲明依賴?生產環境中,我會直接用script標簽引用jQuery,根本不需要dependencies。如果在dependencies中聲明了生產環境依賴的模塊,會怎么樣?會自動幫我添加script標簽還是比如模塊打包時,打包生產環境模塊時會把dependencies中的依賴全部打包進去?但是據我所知,比如webpack在模塊打包時是根據require的模塊創建的依賴圖表來打包的,所以我不太懂為什么要在dependencies聲明生產環境依賴。
問題解答
回答1:我們在實際開發中會用到很多模塊,有些模塊(如,gulp,babel,這些放到devDependencies中)都只是開發環境中用到的,而jquery是用在生產環境中,當你部署項目到生產環境時,執行 npm install --production, 只會安裝dependencies中的模塊,這樣管理模塊就會很方便
回答2:事實就是那個字段是設計給 node 的,所以你寫不寫都無所謂。
詳細來說,作為一個前端項目,你的依賴要么進行打包,要么是 script 標簽引入,所以你的 deps 字段里面有什么根本不會影響最終的代碼。
回答3:如果你用<script>加入模塊的話,這個引入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才能夠讀取到對應的包。
回答4:我覺得你可能是因為需要使用webpack去開發頁面,才使用node的。否則你不會去問dependencies和script之間的關系。這兩者之間毫無關系。
這里你揉雜了3個東西:
package.json的依賴管理
webpack的依賴管理
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可以不使用。
回答5:工作環境改變的時候,你的項目要是想正常運行。必須聲明依賴,這樣不管在哪里,只需要一句npm install即可還原工作環境,依賴什么的全部解決
相關文章:
1. android - NavigationView 的側滑菜單中如何保存新增項(通過程序添加)2. mysql - select查詢多個紀錄的條件怎么寫3. linux - 編譯安裝mysql 5.6.234. 提示語法錯誤語法錯誤: unexpected ’abstract’ (T_ABSTRACT)5. 這段代碼既不提示錯誤也看不到結果,請老師明示錯在哪里,謝謝!6. php7.3.4中怎么開啟pdo驅動7. 老師 我是一個沒有學過php語言的準畢業生 我希望您能幫我一下8. ueditor上傳服務器提示后端配置項沒有正常加載,求助!!!!!9. tp5 不同控制器中的變量調用問題10. php - 第三方支付平臺在很短時間內多次異步通知,訂單多次確認收款
