2012-02-07 12 views
5

私はnode.jsで大規模なプロジェクトをやり遂げようとしていますが、現在いくつかのソートを試しています。node.jsを使ったベストワークフローnpmとgit

以前のノードプロジェクトでは、私が使用したすべてのノードモジュールに追加のフォルダがありました。このフォルダはgitので無視されたと私は容易ではありませんでしたgitのサブモジュールを介してバージョンやアップデートを管理

私は何を探していますがある(楽しい、常に新しいバージョンへの更新、依存関係のないされませんでした。):

npm install packagename
npm dump_modules_into_file

だから、このプロジェクトに関与している誰もが行うことができます:

npm install_or_update_modules_from_file

node_modulesは私のgitリポジトリにトラッキングされたくありません。基本的には、symonfy2がそれをどのように扱うのかに似たものが必要です。bundles

P .:私は約npm submodule packagenameを知っていますが、このコマンドは依存関係をインストールせず、モジュールを更新しないためあまり役に立ちません。

P.S.2:package.jsonについては準備ができていますが、これにはいくつかの欠陥もあります。 (パラメータなしで、手作業でモジュールのバージョンを更新する必要があります)

+1

「package.json'にパラメータがありません」とはどういう意味ですか? –

+0

例:ネイティブのC++パーサーでmongodbをインストールするには、 'npm install mongodb --mongodb:native'を実行する必要があります。私は 'package.json'を使うときに、このネイティブの部分をnpmに渡す方法を理解していません。 – TheHippo

答えて

6

package.jsonあなたが探しているものを達成します。 --mongodb:nativeフラグを渡すことについてのあなたのコメントでは、そのフラグはnpmコマンドの引数であり、package.jsonを自分のプロジェクトで使用するとが動作します。 mongodbパッケージには、ノード処理環境でそのフラグを探す「インストールスクリプト」があります。そのフラグが存在する場合、それはビルドのために別のプロセスを生成します。だから、あなたはnpm install --mongodb:native意志作業を実行しているpackage.json

{ 
    "name": "MyProject" 
    , "description": "Test" 
    , "version": "0.0.1" 
    , "dependencies": { 
     "mongodb": "*" 
    } 
} 

に依存ようにMongoDBしている場合。

「手作業で更新する」というのは、それが本当に初めてのことです。多くの依存関係がある場合は、生成するためのスクリプトを書くことができます。しかし、かなり大きなチームがいるようですが、その場合は、package.jsonへの更新を自動化すると、実際には醜いものになります(新しい開発者や実験的な機能などを考える)。)開発サイクルのこの部分で壊れたビルドについて説明責任を持つことは、必ずしも悪い考えではありません。

参考文献:

EDIT( "スクリプト" セクションを参照してください):ニックが述べたように、.gitignoreに 'node_modules' ディレクトリを追加すると、任意のを防ぐことができますこれらのファイルのうち、あなたのレポにチェックインされることはありません

+0

一般的にパラメータがnpmに渡されてくれてありがとう!私はbashスクリプトやMakefileにnpmコマンドを入れておきましょう。 – TheHippo

+0

http://npmjs.org/doc/shrinkwrap.htmlは助けてくれたでしょう.... – TheHippo

2

Afaik、パッケージ管理を行う唯一の方法は、私があなたがwrt package.jsonについて無関心であるかどうかは不明ですが、 。

使用しているモジュールのバージョンを厳密に制御したい場合は、バージョン番号を明示的に指定できます。また、>=X.X.Xアプローチを使用して、最新の(スレッショルド以上)を自動的に取得することもできます。

これは、あなたのチームメイトに行うことができます:package.jsonファイル内にリストされているすべての依存関係をインストールします

npm install . 

。これらは./node_modulesにインストールされますが、あなたが指摘したように.gitignoreすることができます。

6

彼女eは、node_modulesをgitにチェックする必要があるかどうかを確認する良い記事です。あなたの質問に答えるかもしれません。完全パッケージ構成をテストし、彼らは最終的な展開に私は今、次の手順を使用しますと、モジュールが動作することを確実にするために

node_modules in git

+1

http:// npmjs .org/doc/shrinkwrap.html –

+0

ノードシュリンクラップに関する記事とリンクの両方を読む価値があります –

0

。それは完全にあなたのnode_moduleディレクトリまたはrequire()コードをハックする必要がないので、のように動作するように配備するときにはそれを実行します。

内部プロジェクトまたはgithubのプレリリースでは、package.json"private": trueを設定して、npmが公開を拒否することもあります。

  1. Gitのバージョン管理下にプロジェクトディレクトリを作成し、サブディレクトリとして、すべてのノードモジュールを追加します。サブディレクトリ名はパッケージ名と一致する必要があります。 githubを使って作業している場合は、モジュールディレクトリごとに個別のgit repoを作成したいと思うでしょう。彼らはあなたのプロジェクトレポのgitサブモジュールにすることができます。ファイル.gitignorenode_moduleを追加してください。

  2. npm-serverのようなツールをインストールし、それをプロジェクトディレクトリで実行します。次に、npmレジストリをlocalhostに設定して、今度はnpmがローカルのnpmサーバと通信してパッケージを取得します。それが送信するサブディレクトリとして検出されます。それはそれがregistry.npmjs.orgにプロキシされません。 $ npm set registry http://localhost:6070/ $ cd ~/projects $ npm-server

  3. スタート新しいシェルとローカルのレジストリ・サーバを使用してアプリをインストール $ mkdir sandbox $ cd sandbox

  4. 別のサンドボックスディレクトリを作成します。ローカルnpmキャッシュをクリアし、アプリを再インストールしてください。これを1行で行うので、シェルを介してやり直すのは簡単です。それをスクリプト化したいかもしれません。

    $ npm cache clear; sleep 3; npm uninstall -g app; sleep 3; npm install -g app

  5. のアプリテスト:

    $ npm set registry http://registry.npmjs.org:80/

  6. をあなたが完了したら:あなたのインストールが完了したら

    $ app ....

  7. 登録解除ローカルNPMレジストリをあなたが公開できるテストあなたのアプリをチェックし、npm-serverを停止してデプロイメントを再テストしてください。

$ cd ~/projects $ npm publish app


よりもむしろ&は、サーバの登録を解除する登録し、あなただけのオフインストール1にlocalhostサーバーを使用することができます。 $ npm --registry=http://localhost:6070/ install app


を私はよnpm-serverのフォークされたバージョンを書くプロセス: $ npmsvr on // Registers local registry server $ npmsvr start // Start local registry server $ npmsvr off // Deregisters local registry server

+0

この作業を簡単にするためにnpmレジストリに 'npmsvr'を公開しました。 https://www.npmjs.org/package/npmsvr –

+0

このバージョンは 'npm'と' npm-server'のほんの少しのフロントエンドなので、 'npm-server'をインストールする必要があります –

関連する問題