Ubuntu (12.04) に NPM パッケージをインストールしようとしています。Chris Lea の PPA リポジトリから Node.js と NPM をインストールしました。
Uptime プロジェクトをサーバーにデプロイしようとしています。GitHub からアプリケーションを複製し、root ユーザーとしてアプリケーションの依存関係をインストールしようとしました。
root@dev:/web/my-application# npm install -g
npm http GET https://registry.npmjs.org/mongoose/2.5.11
npm http GET https://registry.npmjs.org/express/2.5.0
npm http GET https://registry.npmjs.org/ejs/0.6.1
npm http GET https://registry.npmjs.org/config/0.4.11
npm http GET https://registry.npmjs.org/async/0.1.18
npm http GET https://registry.npmjs.org/socket.io/0.9.2
npm http 304 https://registry.npmjs.org/ejs/0.6.1
npm http 304 https://registry.npmjs.org/async/0.1.18
npm http 304 https://registry.npmjs.org/mongoose/2.5.11
npm http 304 https://registry.npmjs.org/express/2.5.0
npm http 304 https://registry.npmjs.org/config/0.4.11
npm http 304 https://registry.npmjs.org/socket.io/0.9.2
npm http GET https://registry.npmjs.org/mime
npm http GET https://registry.npmjs.org/connect
npm http GET https://registry.npmjs.org/mkdirp/0.0.7
npm http GET https://registry.npmjs.org/qs
npm http GET https://registry.npmjs.org/policyfile/0.0.4
npm http GET https://registry.npmjs.org/redis/0.6.7
npm http GET https://registry.npmjs.org/socket.io-client/0.9.2
npm http GET https://registry.npmjs.org/yaml
npm http GET https://registry.npmjs.org/vows
npm http GET https://registry.npmjs.org/coffee-script
npm http GET https://registry.npmjs.org/hooks/0.2.0
npm http GET https://registry.npmjs.org/mongodb/0.9.9-5
npm http 304 https://registry.npmjs.org/mime
npm http 304 https://registry.npmjs.org/connect
npm http 304 https://registry.npmjs.org/mkdirp/0.0.7
npm http 304 https://registry.npmjs.org/qs
npm http 304 https://registry.npmjs.org/policyfile/0.0.4
npm http 304 https://registry.npmjs.org/redis/0.6.7
npm http 304 https://registry.npmjs.org/socket.io-client/0.9.2
npm http 304 https://registry.npmjs.org/vows
npm http 304 https://registry.npmjs.org/yaml
npm http 304 https://registry.npmjs.org/coffee-script
npm http 304 https://registry.npmjs.org/hooks/0.2.0
npm http 304 https://registry.npmjs.org/mongodb/0.9.9-5
npm http GET https://registry.npmjs.org/eyes
> mongodb@0.9.9-5 install /usr/lib/node_modules/node-uptime/node_modules/mongoose/node_modules/mongodb
> node install.js
npm http 304 https://registry.npmjs.org/eyes
================================================================================
= =
= To install with C++ bson parser do <npm install mongodb --mongodb:native> =
= =
================================================================================
npm http GET https://registry.npmjs.org/uglify-js/1.2.5
npm http GET https://registry.npmjs.org/ws
npm http GET https://registry.npmjs.org/xmlhttprequest/1.2.2
npm http GET https://registry.npmjs.org/active-x-obfuscator/0.0.1
npm http 304 https://registry.npmjs.org/active-x-obfuscator/0.0.1
npm http 304 https://registry.npmjs.org/uglify-js/1.2.5
npm http 304 https://registry.npmjs.org/xmlhttprequest/1.2.2
npm http 304 https://registry.npmjs.org/ws
npm http GET https://registry.npmjs.org/zeparser/0.0.5
npm http GET https://registry.npmjs.org/commander
npm http GET https://registry.npmjs.org/options
npm http 304 https://registry.npmjs.org/zeparser/0.0.5
npm http 304 https://registry.npmjs.org/options
npm http 304 https://registry.npmjs.org/commander
> ws@0.4.16 install /usr/lib/node_modules/node-uptime/node_modules/socket.io/node_modules/socket.io-client/node_modules/ws
> node install.js
================================================================================
= =
= To install WS with blazing fast native extensions, use =
= <npm install ws --ws:native> =
= =
================================================================================
node-uptime@1.2.0 /usr/lib/node_modules/node-uptime
├── async@0.1.18
├── ejs@0.6.1
├── express@2.5.0 (mkdirp@0.0.7, mime@1.2.5, qs@0.5.0, connect@1.7.3)
├── mongoose@2.5.11 (hooks@0.2.0, mongodb@0.9.9-5)
├── config@0.4.11 (yaml@0.2.3, coffee-script@1.3.3, vows@0.5.13)
└── socket.io@0.9.2 (policyfile@0.0.4, redis@0.6.7, socket.io-client@0.9.2)
パッケージはすべて正常にインストールされているようです。ただし、NPM パッケージの依存関係が満たされているかどうかを確認しているときに、1 秒前にそれらをインストールしていなかったように、満たされていない依存関係がリストされています。
root@dev:/web/my-application# npm list
npm WARN mongoose 2.5.11 Unmet dependency in /web/my-application
npm WARN active-x-obfuscator 0.0.1 Unmet dependency in /web/my-application/node_modules/socket.io/node_modules/socket.io-client
npm WARN uglify-js 1.2.5 Unmet dependency in /web/my-application/node_modules/socket.io/node_modules/socket.io-client
npm WARN ws 0.4.x Unmet dependency in /web/my-application/node_modules/socket.io/node_modules/socket.io-client
npm WARN xmlhttprequest 1.2.2 Unmet dependency in /web/my-application/node_modules/socket.io/node_modules/socket.io-client
node-uptime@1.2.0 /web/my-application
├── async@0.1.18
├─┬ config@0.4.11
│ ├── coffee-script@1.3.3
│ ├─┬ vows@0.5.13
│ │ └── eyes@0.1.7
│ └── yaml@0.2.3
├── ejs@0.6.1
├─┬ express@2.5.0
│ ├── connect@1.7.3
│ ├── mime@1.2.5
│ ├── mkdirp@0.0.7
│ └── qs@0.5.0
├── UNMET DEPENDENCY mongoose 2.5.11
└─┬ socket.io@0.9.2
├── policyfile@0.0.4
├── redis@0.6.7
└─┬ socket.io-client@0.9.2
├── UNMET DEPENDENCY active-x-obfuscator 0.0.1
├── UNMET DEPENDENCY uglify-js 1.2.5
├── UNMET DEPENDENCY ws 0.4.x
└── UNMET DEPENDENCY xmlhttprequest 1.2.2
私の知る限り (ただし、間違っていれば訂正してください)、NPM はNODE_PATH
パッケージをグローバルにインストールするときに環境変数を尊重します。おかしなことに、上記のパッケージ インストールの出力を見ると、NPM が依存パッケージを にグローバルにインストールしたことがわかります/usr/lib/node_modules
。NODE_PATH
環境変数を再確認すると、NODE_PATH
変数の設定が異なっていることがわかります。
root@dev:/web/my-application# echo $NODE_PATH
/usr/lib/nodejs:/usr/share/javascript
明確にする必要があるのは、変数がどのように設定されているかわかりません。NODE_PATH
自分で設定したことはなく、Node と NPM をインストールしたときに Ubuntu パッケージに付属していたような気がします。
NODE_PATH
次に、変数を明示的に設定し、依存関係を再確認することにしました。
root@dev:/web/my-application# export NODE_PATH=/usr/lib/node_modules
root@dev:/web/my-application# npm list
npm WARN mongoose 2.5.11 Unmet dependency in /web/my-application
npm WARN active-x-obfuscator 0.0.1 Unmet dependency in /web/my-application/node_modules/socket.io/node_modules/socket.io-client
npm WARN uglify-js 1.2.5 Unmet dependency in /web/my-application/node_modules/socket.io/node_modules/socket.io-client
npm WARN ws 0.4.x Unmet dependency in /web/my-application/node_modules/socket.io/node_modules/socket.io-client
npm WARN xmlhttprequest 1.2.2 Unmet dependency in /web/my-application/node_modules/socket.io/node_modules/socket.io-client
node-uptime@1.2.0 /web/my-application
├── async@0.1.18
├─┬ config@0.4.11
│ ├── coffee-script@1.3.3
│ ├─┬ vows@0.5.13
│ │ └── eyes@0.1.7
│ └── yaml@0.2.3
├── ejs@0.6.1
├─┬ express@2.5.0
│ ├── connect@1.7.3
│ ├── mime@1.2.5
│ ├── mkdirp@0.0.7
│ └── qs@0.5.0
├── UNMET DEPENDENCY mongoose 2.5.11
└─┬ socket.io@0.9.2
├── policyfile@0.0.4
├── redis@0.6.7
└─┬ socket.io-client@0.9.2
├── UNMET DEPENDENCY active-x-obfuscator 0.0.1
├── UNMET DEPENDENCY uglify-js 1.2.5
├── UNMET DEPENDENCY ws 0.4.x
└── UNMET DEPENDENCY xmlhttprequest 1.2.2
まだ成功していませんが、ノードでアプリケーションを実行しようとすると、正常に初期化されて実行されます。
root@dev:/web/my-application# node app.js
Monitor origin started
info - socket.io started
Express server listening on port 8082 in development mode
Mongoose: pings.ensureIndex({ timestamp: -1 }) {}
Mongoose: checkevents.ensureIndex({ timestamp: -1, check: 1 }) {}
Mongoose: checkhourlystats.ensureIndex({ timestamp: -1, check: 1 }) { unique: true }
Mongoose: checkdailystats.ensureIndex({ timestamp: -1, check: 1 }) { unique: true }
Mongoose: checkmonthlystats.ensureIndex({ timestamp: -1, check: 1 }) { unique: true }
Mongoose: checks.find({ '$where': 'function () {\n if (this.isPaused) return false;\n if (!this.firstTested) return true;\n var delay = (this.lastTested.getTime() - this.firstTested.getTime()) % this.interval;\n return (Date.now() - this.lastTested.getTime() + delay) >= (this.interval || 60000);\n}' }) { fields: { qos: 0 }, safe: true }
Mongoose: taghourlystats.ensureIndex({ timestamp: -1, name: 1 }) { unique: true }
Mongoose: tagdailystats.ensureIndex({ timestamp: -1, name: 1 }) { unique: true }
Mongoose: tagmonthlystats.ensureIndex({ timestamp: -1, name: 1 }) { unique: true }
Mongoose: tags.ensureIndex({ name: 1 }) { unique: true }
これで問題ないように見えますが、アプリケーションを root として実行するつもりはないので、専用ユーザーとしてアプリを実行するときにグローバル NPM パッケージが認識される必要があります。
パッケージのインストール時に、NPM の動作に一貫性がないような気がします。グローバルにインストールすると、正常に実行されますが、後でそれらを取得できません。
どうすればよいですか、また、環境変数はどのように見えますかNODE_PATH
?