2015-10-13 17 views
0

對我來說似乎很奇怪,我在我不應該的事情上受到依賴衝突。例如,讓我們以角度和角度日期選擇器爲例。bower - 在編寫庫時,我應該何時使用dependency vs. devDependency?

當我添加對angular-datepicker的依賴關係時,我得到另一個角度版本的衝突。

在npm中,解析的依賴關係在運行時使用。所以如果angular-datepicker在npm中運行,它將在運行時使用它自己的角度版本。這是有道理的。

但是在bower中不是這樣,因爲運行時版本是共享的,而angular-datepicker的角度版本只用於開發,而不是用於運行時。

我添加的圖書館越多,它就越難「滿足」所有圖書館。

在我看來,所有的庫都應該聲明angular作爲devDependency而不是依賴項 - 因爲他們期望項目使用它們直接依賴於角度而不是使用它們的角度。

但是,那麼我應該何時使用依賴關係?

有人可以向我澄清這個問題,請。

+0

一個問題是你如何在你的angular-datepicker'bower.json'中得到與依賴衝突?這是沒有道理的,因爲爲什麼你的應用程序中的'bower install'甚至會在應用程序的一個依賴關係中查看'bower.json'?我所看到的所有'angular-datepicker'軟件包都對Angular有依賴性......但是它們不會在應用程序的級別被'bower install'調用。 – YPCrumble

+0

@YPCrumble你從來沒有得到一個衝突,做涼亭安裝?也許我的例子是不正確的(即使我檢查)。這個問題不是特定於圖書館的,而是一般的想知道這種依賴檢查的目的是什麼,因爲它在運行時沒有真正使用 –

回答

1

對於可能需要作爲開發人員構建/測試/編譯/提供應用程序的應用程序,您應該使用devDependency。比如你的測試套件或者你的一些其他任務跑步者。

您應該使用dependency來爲客戶端運行編譯的應用程序所需的任何東西。在你的情況下,Angular和Angular datepicker都是依賴項。

一個主要區別是,如果運行bower install -p(用於生產),則只會將其安裝到您的bower_components目錄中並忽略devDependencies。

這聽起來像是發生了什麼,你的應用程序正在運行Angular的一個版本,而你的Angular-datepicker插件正在運行不同版本的Angular。一個好的解決方案是將所有內容更新到最新的Angular版本,或者如果這是不可能的,請選擇與您正在運行的Angular版本兼容的angular-datepicker插件版本。

+0

但是,如果我是一個圖書館並且有一個項目使用我,我不會真的希望項目使用「我的」角度依賴。他們很可能有自己的。那麼我的依賴目的是什麼? –

+0

@guymograbi在這種情況下,我認爲更多的是允許開發人員和第三方軟件包準確理解庫在運行時具有哪些依賴關係。我在Bower和NPM之間看到的主要區別是,bower不會遞歸地安裝依賴項,所以您是對的,在這種情況下,依賴項會被忽略。 – YPCrumble

+0

所以你建議它只是爲了文檔?我仍然沒有看到應該在可重用的庫中使用「依賴關係」的情況。據我現在瞭解,可重複使用的庫應該總是使用devDependencies,誰使用它們應該意識到它們的依賴關係(從文檔或其他),並將它們帶到一起。就像使用CSS。有沒有辦法告訴鮑爾忽視他們? –

相關問題