2013-03-19 4 views
9

私はgithubにプッシュしたいフロントエンドとバックエンドのコードを含むWebアプリケーションを持っていますが、現在は依存関係のいくつかがソースツリーを管理しています。バックエンドコードはPerlであり、CPANからモジュールの依存関係をインストールすることはよく理解されているので、そこには依存関係はありません。私は主にjQueryライブラリとオープンソースのJavascriptライブラリをいくつか持っています。展開のためにオープンソースアプリケーションでJavascriptの依存関係をパッケージ化または宣言するにはどうすればよいですか?

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

私はライブラリのバージョンが使用されている制御し、また、リモートからのjQueryなどをロードするためにCDN(コンテンツ配信ネットワーク)を使用する人々を強制することはできませんように、これは、非常に便利です。 3〜5年後にはまだオンラインではないかもしれないドメインです。

ただし、ライセンスファイルを含める場合でも、アプリケーションに他のプロジェクトのソースを含めることが適切かどうかはわかりません。

このような依存関係をオープンソースのWebアプリケーションに含める最も良い方法は、動作中のデプロイメントの利便性を維持しながら依存関係を尊重することですか?

+1

Gitサブモジュールは、実際には、あまりにも心配することはありませんし、あなたが持っているセットアップで実行してください。 – Matt

+0

ありがとう... git submodulesは、他のプロジェクトへの上流へのコミットの可能性があるときに、いくつかのプロジェクトで使用するsvn:externalsとまったく同じように聞こえます。しかし、私はこの場合、タグ付きのバージョンに依存したいだけで、外部のリポジトリを指してはいけないと思います。 – Marcus

答えて

0

永遠に何も起こりそうもありません - あなたがここで答えようとしているのは、真実の源がそれらに依存するコードの寿命を延ばすように物事を設定する方法です。

あなたのツリーにソースを含めることは、単なるカップルなものであり、特定のリリースに依存している場合、完全に合理的です。

代わりに、とにかくGitHubにプッシュするので、必要な前提条件をフォークし、アプリケーションに適切にタグ付けし、Gitサブモジュールとして含めることができます。そうすれば、少なくともメインアプリケーションのソースコードの正当な真実のソースと同程度になります。

今はGitHubにはないが、オープンソースである場合は、自分自身をGitHubに追加してから、これらの新しいGitHubリポジトリをプロジェクトにサブモジュールとして追加することは合理的です。

0

ライセンスを遵守している限り、プロジェクトにソースを含めても問題ありません。それは気が散るかもしれない。誰かがjQueryに慣れていない人、それが第三者のコードであることに気づいていない人がいます。彼らはあなたのプロジェクトと無関係ではないことに気づかずに、それを掘り下げる時間を無駄にするかもしれません。

依存関係をREADMEファイル(README、INSTALL、DEPENDSなど)に関係なく記録する必要があります。現在、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

あなたの要件には、単純な「ベスト」ソリューションはないと思います。私は様々なプロジェクトでさまざまなアプローチを使用しました。それらのすべてが非常にうまくいっています。コードを整理する方が望ましいので、長期間に渡ってコードを簡単に管理できます。これはもちろん個人的なものです。

自分自身がjQueryにCDNを使用したいと思っています.GPGサーバーが5秒以上ダウンしているという(非常に危険な)リスクよりも利点があります。コードの組織について

<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> 

::私は自分のファイルを管理することを好む とさえ、あなたがロードするためにあなたのコードにフェイルセーブ構築することができ、あなたとlocalYこのようなCDNに到達できない場合にはjQueryのフレームワークを、ホストされていますすべてのアプリケーションの後、用に構築されてテストされ、依存するので - 私はいつも(例えばjQueryと他のライブラリのバージョン番号を含む)アプリケーションスナップショット内のすべての外部ファイルをインクルードします私のアプローチでは、以下の構造

/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) 

特定の外部ライブラリ上で。だから私は、彼らが単一のユニットを形成するように、このライブラリをコードに「ハードリンク」したいと思う。

私の助言は、gitサブモジュールを使用せず、完全に管理しているすべてのファイルを含む単一のリポジトリを持つことです。しかし、CDNを使用してライブラリをロードします(ロードするバージョンを正確に制御できるため、このソリューションは完璧に機能します)。 jQueryの新しいバージョンですか?最初に実装するのはローカルでテストしてから、新しいjQueryファイルを/ js/libフォルダに追加します(古いファイルを上書きせず、新しいファイルに一意のバージョン番号を追加します)

1

パッケージ管理あなたのJS依存のためのBowerのような?このフロントエンドのもののパッケージ管理は、バックエンドモジュール(CPAN、gems、pipなど)によく似ています。

関連する問題