人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

npm insatll -g express
だと/usr/local/lib/node_modules/以下にインストールされて

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

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

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

●質問者: studio2021
●カテゴリ:インターネット ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● y-kawaz
●90ポイント ベストアンサー

まず、-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 で入れたパッケージが入る場所です。


studio2021さんのコメント
情報有り難うございます!非常に助かりました!!

2 ● pretaroe
●10ポイント

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

を参考にしてください。


studio2021さんのコメント
参考URL教えていただきありがとうございました!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ