88

私はBundlerが大好きです。依存関係の管理が得意です。私はnpmが大好きです。nodeパッケージのインストールは簡単です! 私は nodejs アプリを持っており、アプリの依存関係を指定して、アプリを展開する場所に簡単にインストール/更新できるようにしたいと考えています。これは私がリリースしているライブラリではなく、本格的な Web アプリです。

コマンドは知ってnpm bundleいますが、パッケージがインストールされているディレクトリを単に上書きしているようです。

私はこの方法でバンドラーを使用することに慣れています:

# Gemfile
gem "rails", "3.0.3"

ホスト マシンに rails v3.0.3 およびその他の必要な gem が存在しない場合にのみインストールします。

> bundle install

npmで同様のことを達成するにはどうすればよいですか?

4

6 に答える 6

148

npm 1.0(READMEファイルの手順に従うとデフォルトで取得されるもの)の時点で、「バンドル」は分離されたものではなくなり、単に「どのように機能するか」です。

それで:

  1. プロジェクトpackage.jsonのルートにファイルを配置します
  2. そのファイルにあなたのdepsをリストしてください

    { "name" : "my-project"
    , "version" : "1.0.0"
    , "dependencies" : { "express" : "1.0.0" } }
    
  3. npm install これは引数なしで呼び出しており、グローバルモードではないため、すべてのdepをローカルにインストールするだけです。

  4. require("express")そして幸せになる。
于 2011-05-16T20:42:42.293 に答える
10

編集:これはnpmバージョン<1.0にのみ適用されます


これを理解するのは非常に困難でしたが、NPM はこれを可能にします。

3つのコンポーネントが必要です

  1. リポジトリ内のサブディレクトリ (つまりdeps/)
  2. package.json依存関係をリストする上記のディレクトリ内のファイル
  3. index.js依存関係を必要とする上記のディレクトリ内のファイル

Expressが唯一の依存関係であると想像してください

deps/package.json

注:依存関係を変更するたびにバージョン # をインクリメントします

{
  "name": "myapp_dependencies",
  "version": "0.0.1",
  "engines": {
    "node": "0.4.1"
  },
  "dependencies":{
    "express": "2.0.0beta2"
  }
}

deps/index.js

export.modules = {
  express: require('express')
  //add more
}

これで、npm を使用して依存関係をインストールできるはずです。この部分を展開プロセスの一部にすることもできます

cd deps
npm install

次に、アプリ コード内で、次のように特定のバージョンの Express にアクセスできます。

var express = require('myapp_dependencies').express;
于 2011-03-13T11:48:19.340 に答える
5

これら 2 つの記事は、Isaacs (著者 npm) のブログから読む必要があります。それらは本当に優れていると思います。目標を達成する方法を教えてくれると思います。

  1. http://blog.izs.me/post/1675072029/10-cool-things-you-probably-didnt-realize-npm-could-do
  2. http://foohack.com/2010/08/intro-to-npm/

リンク#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 を実行します。もちろん、複数のバージョンをインストールして、必要なバージョンをアクティブ化することもできます。

于 2011-02-02T12:33:03.670 に答える
2

最も簡単な解決策は、(先月 npm に追加されpackage.jsonた)フラグが. そうすれば、プロジェクトの依存関係を実行または取得できますが、非公開プロジェクトを誤って公開することを防ぐことができます。privatetruenpm installnpm 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.

于 2011-03-30T02:36:10.293 に答える
2

Npm バージョン 1.1.2 の時点で、 に類似したファイルnpm shrinkwrapを作成する新しいコマンドがあります。ソフトウェアの腐敗を防ぐために、1 つ作成することが重要です ( Bundler の理論的根拠を参照してください)。特に、Nodejs には急速に変化するコミュニティがあるためです。npm-shrinkwrapped.jsonGemfile.lock

は自動的に作成bundle installされますが、作成されません(ただし、存在する場合は使用されます)。したがって、使用することを覚えておく必要があります。Gemfile.locknpm installnpm-shrinkwrapped.jsonnpm shrinkwrap

http://blog.nodejs.org/2012/02/27/managing-node-js-dependencies-with-shrinkwrap/で完全なガイドを読む

于 2013-02-20T14:56:09.180 に答える
1

npm同様にアプリを公開し、その依存関係を package.json ファイルにリストします。

誰かがnpmあなたのパッケージをインストールするために使用するときnpm、その依存関係を解決します。

パッケージ仕様: http://wiki.commonjs.org/wiki/Packages/1.0

于 2011-02-02T07:52:27.963 に答える