Bundler が大好きで、依存関係の管理が得意です。 npm が大好きで、ノードパッケージのインストールは簡単です! nodejsアプリを持っているので、アプリの依存関係を指定し、アプリを展開する場所ならどこでも簡単にインストール/更新できるようにしたいです。これは私がリリースしているライブラリではなく、本格的なWebアプリです。
私はnpm bundle
コマンドですが、それは単にパッケージがインストールされているディレクトリを単に上書きするように思えます。
私はこの方法でバンドラーを使用することに慣れています:
# Gemfile
gem "Rails", "3.0.3"
ホストマシン上にRails v3.0.3およびその他の必要なgemが存在しない場合のみインストールします
> bundle install
npmで似たようなことを達成するにはどうすればよいですか?
Npm 1.0の時点で(READMEファイル)の手順に従うとデフォルトで取得されるようになりました)、「バンドル」は分離されたものではなくなりました。 「。
そう:
package.json
_ファイルを配置しますそのファイルの深さをリストします
_{ "name" : "my-project"
, "version" : "1.0.0"
, "dependencies" : { "express" : "1.0.0" } }
_
_npm install
_これはグローバルモードではなく、引数なしでこれを呼び出しているため、すべての依存関係をローカルにインストールします。
require("express")
と幸せになります。これを理解することは非常に困難でしたが、NPMはこれを可能にします。
deps/
)package.json
依存関係をリストする上記のディレクトリ内のファイルindex.js
依存関係を必要とする上記ディレクトリ内のファイルexpress が唯一の依存関係であると想像してください
注:依存関係を変更するたびにバージョン番号を増やします
{
"name": "myapp_dependencies",
"version": "0.0.1",
"engines": {
"node": "0.4.1"
},
"dependencies":{
"express": "2.0.0beta2"
}
}
export.modules = {
express: require('express')
//add more
}
これで、npmを使用して依存関係をインストールできるはずです。この部分を展開プロセスの一部にすることもできます
cd deps
npm install
次に、アプリコード内で、次のようにExpressの特定のバージョンにアクセスできます。
var express = require('myapp_dependencies').express;
Isaacs(author npm)ブログからこれら2つの記事を読む必要があります。彼らは本当に良いと思うし、あなたの目標を達成する方法を教えてくれると思う:
リンク#1(ポイント#11)がこれを説明していると思う:
11:すべての依存関係をパッケージ自体にバンドルします
Npm bundleコマンドを使用すると、npmはすべての依存関係をパッケージのnode_modulesフォルダーに入れます。しかし、それで終わりではありません。
レジストリにないものに依存したい場合は、それを行うことができます。これを行うだけです:
npm bundle install http://github.com/whoever/whatever/tarball/master これにより、そのtarballの内容がバンドルにインストールされ、依存関係としてリストできます。パッケージのインストール時にインストールを試みないでください。
これは、独自のフォークを持っている場合にも便利で、名前を変更したくない場合に便利です。
実際、バンドルでほぼすべてのnpmコマンドを実行できます。中身を確認するには、npm bundle lsを実行します。何かを削除するには、npm bundle rm thingを実行します。そしてもちろん、複数のバージョンをインストールして、必要なバージョンをアクティブにすることができます。
私には、最も簡単な解決策はpackage.json
ファイルにprivate
フラグ(先月npmに追加)がtrue
に設定されています。そうすれば、npm install
または npm bundle
は、プロジェクトの依存関係を取得しますが、非公開プロジェクトを誤って公開することを防ぎます。
次に例を示しますpackage.json
:
{
"name": "yourProject"
,"version": "1.0.0"
,"dependencies": { "express" : ">=2.1.0" }
,"private": true
}
ランニング npm install
が存在しない場合、ローカルシステムにexpress
をインストールします。ランニング npm publish
は、"private": true
。
あなたとあなたのチームは、バージョンタグを内部的に使用して、時間の経過に伴う依存関係の変更を追跡できます。依存関係を変更するたびに、バージョンを上げます。インストールされているバージョンを確認するには、npm ls installed
。
Npmバージョン1.1.2以降、新しいコマンド npm shrinkwrap
があり、npm-shrinkwrapped.json
に似たGemfile.lock
ファイルを作成します。ソフトウェアの腐敗を防ぐために、それを作成することが重要です( Bundler's rationale を参照)。特にNodejsには動きの速いコミュニティがあります。
bundle install
はGemfile.lock
を自動的に作成しますが、npm install
はnpm-shrinkwrapped.json
を作成しません(存在する場合は使用します)。したがって、npm shrinkwrap
を使用することを忘れないでください。
http://blog.nodejs.org/2012/02/27/managing-node-js-dependencies-with-shrinkwrap/ で完全なガイドを読む
npm
を使用してアプリを公開し、package.jsonファイルに依存関係をリストします。
誰かがnpm
を使用してパッケージをインストールすると、npm
が依存関係を解決します。