npm insatll -g express

だと/usr/local/lib/node_modules/以下にインストールされて

-gオプションを付けない場合
sudo npm install express
カレントディレクトリ以下にインストールされるのですが、

インストール先を変更する方法を教えてください。
またインストール先を変更した先の指定したpathでプログラムを動かす方法はありますでしょうか。

初心者質問ですがよろしくお願い致します。

回答の条件
  • 1人50回まで
  • 13歳以上
  • 登録:2012/05/13 11:33:47
  • 終了:2012/05/15 06:14:15

ベストアンサー

id:y-kawaz No.1

y-kawaz回答回数1421ベストアンサー獲得回数2262012/05/13 13:36:13

ポイント90pt

まず、-gオプションを付けない場合はsudo無しで↓のようにした方が良いと思います。

npm install モジュール名

ぶっちゃけ、アプリケーション毎に ./node_modules があって、アプリ毎に依存するパッケージやバージョンが違ってよいし、この形はほかアプリと依存ライブラリのバージョン違いによる問題を避けられることもあり、一般的だと思います。

各アプリ毎に色んな依存パッケージをinstallするのが面倒だという場合はアプリのディレクトリに以下のような内容のpackage.jsonを作っておけば、アプリディレクトリ内でnpm installを実行するだけで依存パッケージが一発でインストールできます。

{ "name": "myapp"
, "version": "1.0.0"
, "dependencies":
  { "express": "*"
  , "jade": "*"
  }
}

バージョンは"*"や""にしておくと最新になりますが、勿論バージョン指定もできます。
この作法に則って書いておけば、後で自分が作ったアプリを公開する場合に、他の人も依存パッケージを1個ずつ探す必要なく一発で利用できる為便利です。

ちなみにnpmはパッケージインストールの際、以下の様な順番でインストール場所を決めます。

  1. ./node_modules, ../node_modules, ../../node_modules という順番に探して最初に見つけた場所に入れる。
  2. 遡ってnode_modulesが見つからなければカレントディレクトリにnode_modulesを作って入れる。


※昔は ~/.npmrc でrootを指定しておくとパッケージのインストール場所を指定できたのですが最近のnpmでは仕様変更でこの設定が使えなくなってるようです。以下のコマンドを実行するとnpmの設定項目とデフォルト値の一覧が見れますがrootという設定自体が今はありません。

npm config ls -l


あとは、複数アプリでモジュールを共用したい場合は以下のようなディレクトリ構造を作っておくやりかたもアリかもしれません。

workspace
├node_modules
├app1
└app2

こうしておくとapp1やapp2内でnpm installするとworkspace/node_modulesにインストールされ、実行時も./node_modules, ../node_modules, …という順にモジュールを探してくれるので共用されます。


あと、node実行時に一番最後にモジュールを探しに行く場所は $PREFIX(nodeのインストール場所)/lib/node ですが、実はこれが npm install -g で入れたパッケージが入る場所です。

id:studio2021

情報有り難うございます!非常に助かりました!!

2012/05/15 06:15:30

その他の回答(1件)

id:y-kawaz No.1

y-kawaz回答回数1421ベストアンサー獲得回数2262012/05/13 13:36:13ここでベストアンサー

ポイント90pt

まず、-gオプションを付けない場合はsudo無しで↓のようにした方が良いと思います。

npm install モジュール名

ぶっちゃけ、アプリケーション毎に ./node_modules があって、アプリ毎に依存するパッケージやバージョンが違ってよいし、この形はほかアプリと依存ライブラリのバージョン違いによる問題を避けられることもあり、一般的だと思います。

各アプリ毎に色んな依存パッケージをinstallするのが面倒だという場合はアプリのディレクトリに以下のような内容のpackage.jsonを作っておけば、アプリディレクトリ内でnpm installを実行するだけで依存パッケージが一発でインストールできます。

{ "name": "myapp"
, "version": "1.0.0"
, "dependencies":
  { "express": "*"
  , "jade": "*"
  }
}

バージョンは"*"や""にしておくと最新になりますが、勿論バージョン指定もできます。
この作法に則って書いておけば、後で自分が作ったアプリを公開する場合に、他の人も依存パッケージを1個ずつ探す必要なく一発で利用できる為便利です。

ちなみにnpmはパッケージインストールの際、以下の様な順番でインストール場所を決めます。

  1. ./node_modules, ../node_modules, ../../node_modules という順番に探して最初に見つけた場所に入れる。
  2. 遡ってnode_modulesが見つからなければカレントディレクトリにnode_modulesを作って入れる。


※昔は ~/.npmrc でrootを指定しておくとパッケージのインストール場所を指定できたのですが最近のnpmでは仕様変更でこの設定が使えなくなってるようです。以下のコマンドを実行するとnpmの設定項目とデフォルト値の一覧が見れますがrootという設定自体が今はありません。

npm config ls -l


あとは、複数アプリでモジュールを共用したい場合は以下のようなディレクトリ構造を作っておくやりかたもアリかもしれません。

workspace
├node_modules
├app1
└app2

こうしておくとapp1やapp2内でnpm installするとworkspace/node_modulesにインストールされ、実行時も./node_modules, ../node_modules, …という順にモジュールを探してくれるので共用されます。


あと、node実行時に一番最後にモジュールを探しに行く場所は $PREFIX(nodeのインストール場所)/lib/node ですが、実はこれが npm install -g で入れたパッケージが入る場所です。

id:studio2021

情報有り難うございます!非常に助かりました!!

2012/05/15 06:15:30
id:pretaroe No.2

pretaroe回答回数531ベストアンサー獲得回数752012/05/13 13:36:27

ポイント10pt

3. npmのインストール先を指定しておく方法
http://d.hatena.ne.jp/t_43z/20101013/1286957802

を参考にしてください。

id:studio2021

参考URL教えていただきありがとうございました!

2012/05/15 06:16:05

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません