2016-02-10 11 views
0

我真的不明白。當我在主文件夾上運行npm install時,爲什麼它必須下載node_modules中的所有依賴關係,爲什麼需要爲每個單個項目完成此操作?在Sinatra(Ruby微框架)中,我從來沒有這樣做過,並且很容易使用全局安裝的gem,而無需再次將它們中的每一個下載並保存到項目文件夾中。我爲什麼要爲每個expressjs應用程序的nodejs依賴關係創建node_modules文件夾

我在某處讀到它是爲了避免版本不匹配問題,但是如果它的工作方式是全局安裝,並且只需要像Python這樣的其他語言(使用virtualenv解決版本問題),Ruby等,爲什麼不能像node.js一樣?

無論幹什麼?

回答

0

你可以做npm install --global(或簡稱爲-g)全局安裝。但是,當2個項目引用不同版本的相同依賴關係時,會產生問題。你將會遇到難以追查的衝突。在本地安裝它使它更便攜。你可以參考this document

這個問題不僅存在於node.js世界中。不同的語言對這個問題的處理方式不同我不知道紅寶石,但:

  1. 在python人使用virtualenv來分離依賴關係,這需要更多的努力。
  2. Java的Maven會在$HOME/.m2文件夾中緩存工件,但編譯項目時,它們會將這些字節碼從.m2文件夾複製到本地文件夾target

有你想要做npm install --global雖然這些工具,如grunt.js/gulp.js時間。

我只是覺得它與DRY無關,因爲你沒有兩次寫代碼。它只是下載兩次。

這就是說,你還可以全局安裝所有東西。

+0

感謝您的回覆@Leonmax。雖然我可以全局安裝,但node_modules文件夾仍然會保存到項目文件夾中嗎? –

+0

所以這是讓你感覺不舒服的文件夾?它就像maven的目標文件夾,在python中你也會得到很多* .pyc,除了源代碼本身總是有其他東西,不是嗎?爲什麼它非常困擾你,LOL – Leonmax

相關問題