2013-03-19 114 views
9

我有一個web應用程序,包括前端和後端代碼,我想推送給github,但是,它目前有一些依賴關係管理它的源代碼樹。後端代碼是Perl,並且從CPAN安裝模塊依賴關係很好理解,所以我沒有那些內容。我主要有jQuery庫和其他一些開源的Javascript庫。如何在開源應用程序中打包或聲明Javascript依賴關係?

-mycode 
-mydir 
    -mycode 
    -jquerylibs (with their license) 
    -mycode 
    -jslibs  (with their own licenses) 
-mycode 

對於部署,這是非常方便的,因爲我可以控制正在使用該庫的版本,也不能強迫人們使用CDN(內容分發網絡),以從遠程加載的jQuery等。域名可能在三年或五年內仍未上線。

不過,我不知道這是否是合適的,包括其他項目的來源與我的應用程序,即使我包括許可文件。

什麼是包括這樣依賴於一個開源的Web應用程序,同時保持工作部署的方便了依賴做榮譽的最好方法是什麼?

+1

如果你想* *,以解決這個問題,Git的子模塊似乎是要走的路,但實際上,我不會太擔心它,並且使用你所擁有的設置來運行。 – Matt 2013-03-19 13:05:43

+0

謝謝... git子模塊的聲音完全像svn:外部的,我在某些項目中使用的時候,可能會向上遊提交這些其他項目。但我認爲在這種情況下,我只想依靠標籤版本,而不是指向外部存儲庫。 – Marcus 2013-03-19 13:18:49

回答

0

沒有什麼會永遠在你身旁 - 我想你想在這裏回答的問題是如何設置的東西,使真理的來源將持續進行依賴於它們的代碼的壽命。

如果只包含一些東西,而且依賴於特定版本,那麼將源代碼包含在樹中是非常合理的。

作爲替代方案,因爲你推到GitHub上,無論如何,也許你可以派生必要的先決條件,適當地標記它們爲你的應用程序,然後把它們作爲Git的子模塊。那樣的話,它們至少與主應用程序源代碼的真實源代碼一樣長。

如果他們現在不在GitHub上,但是是開源的,將它們自己添加到GitHub中仍然是合理的,然後將這些新的GitHub repos作爲子模塊添加到項目中。

0

只要您遵守許可證,在項目中包括源代碼就沒有問題。但它可能會讓人分心。有人不熟悉jQuery或其他任何可能沒有意識到它是第三方代碼。他們可能會浪費時間來挖掘它或者其他東西,而不會意識到它與你的項目無關。

無論你應該文檔中的自述文件的依賴關係(例如,README,INSTALL依賴,等等)。可能是因爲您目前使用jQuery x.y.z,但可能存在影響軟件的錯誤。所以你不能保證固定版本永遠是理想的。

通常不是綁定源代碼(因爲它不會被修改,而且幾乎不需要跟蹤),所以我改爲寫一個幫助bash或Perl程序來從網上獲取依賴關係。這樣,有一個簡單的按鈕可能適用於那些不想做大量閱讀或手動工作的人,但是您沒有其他項目的混亂讓人們從自己的代碼中分散注意力,並且依賴關係也沒有您的存儲庫不必要地跟蹤。

附加:

如果可能的話,你應該也喜歡在樹從自己完全獨立的第三方軟件,所以很明顯,其中第三方軟件開始,並在你的是(再次,只是讓人們不要不要把它誤認爲是你的,這可能會導致你無意義的請求,等等)。

* <root>/ 
`-* README 
`-* extlib/ <-- third party stuff can be tucked away in here, for example 
| `-* <third_party_code> 
| `-* jquery-x.y.z/ 
| | `-* ... 
| `-* other-x.y.z/ 
| `-* ... 
`-* include/ 
`-* Makefile 
`-* src/ 
    `-* <your_code> 
    `-* main.c 
    `-* ... 

如果需要在部署共同混合,然後有構建系統複製或鏈接東西放到合適的地方。

0

我也確定你需要的應用程序的許可證類型。有一些開源的目的可以讓下載者改變甚至改變許可證的類型並用於它。當然還有GPL許可證甚至MIT許可證的變體。尋找適合您需求的產品。

0

我認爲沒有簡單的「最佳」解決方案滿足您的要求。我在各種項目中使用了許多不同的方法。他們都做得很好 - 重要的是你喜歡如何組織代碼,所以你可以很容易地維護它更長的時間。這當然是一件非常私人的事情。

我自己喜歡用CDN的jQuery - 它比(不太可能)風險的方式更有優勢,谷歌認爲,CDN服務器關閉的時間超過5秒。而且即便如此,你可以建立一個故障保存到您的代碼加載您localy託管jQuery框架的情況下,CDN是不可達的,就像這樣:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
<script>window.jQuery || document.write('<script src="js/lib/jquery-1.10.2.min.js"></script>')</script> 

關於組織代碼: 我喜歡來管理我的文件以下結構

/app 
    +- /js 
    | +- /src    <- my custom scripts go into "/js/src" 
    | | +- general-ui.js <- I create/edit this file 
    | |      Usually I only edit files in this directory 
    | +- general-ui.min.js <- the minified version is automatically stored in "/js" 
    | |      I never edit a file in here 
    | +- /lib    <- external libraries go in here. 
    |  |     NEVER edit a file inside the "/js/lib" folder! 
    |  +- jquery-1.10.2.min.js <- Always add version-number to the files in /js/lib 
    +- /css 
    | +- /scss    <- my SCSS source files which compile into "/css/style.css" 
    | +- /lib    <- stuff like twitter bootstrap css. Never edit files in here 
    | +- /font    <- webfonts used by the css 
    +- /inc     <- my own PHP classes/modules/etc 
    | +- /lib    <- external PHP modules (again: never edit these files yourself) 
    +- /img     <- all images used by the application 
    +- /web     <- my own PHP/HTML files 
    +- index.php    <- this will load the /inc/application.php class which handles the rest 
    +- debug.php    <- same as index, but enables some debugging flags enabled 
    +- config.php    <- config stuff (DB, etc) 

在我的方法,我將始終包含在應用程序快照所有外部文件(例如,包括jQuery和其他庫的版本號) - 因爲畢竟該應用程序是專爲與測試,並依賴在某個外部圖書館;所以我想在構建單個單元時將這些庫「硬連接」到代碼中。

所以我的建議是不要使用git的子模塊,而是有一個信息庫,其中包括所有的文件,你是完全的控制權。但是使用CDN來加載庫(你可以精確地控制加載哪個版本,這使得這個解決方案非常好)。 新版本的jQuery?首先實現在本地,對其進行測試,然後添加新的jQuery文件到/ JS/lib文件夾(不覆蓋舊的,但添加具有唯一版本號的新文件)

1

你有沒有考慮使用包管理像你的JS依賴關係的Bower?該前端的東西包管理正變得越來越流行,類似後端模塊(CPAN,寶石,畫中畫等)

相關問題