168

MacOSXLionでNodeをセットアップしようとしています。すべて正常に機能しているようですが、グローバルモジュールフォルダーからモジュールをインポートできないようです。エラーが発生します、

Error: Cannot find module <module>

これを実行すると、次node -e require.pathsのようになります。

[ '/usr/local/lib/node_modules',
  '/Users/Me/.node_modules',
  '/Users/Me/.node_libraries',
  '/usr/local/Cellar/node/0.4.12/lib/node' ]

正解です。私のモジュールは実際に/usr/ local / lib/node_modulesにインストールされています。ただし、スクリプトを実行しようとすると、次のようになります。

Error: Cannot find module 'socket.io'
    at Function._resolveFilename (module.js:326:11)
    at Function._load (module.js:271:25)
    at require (module.js:355:19)
    at Object.<anonymous> (/Users/Me/node/server.js:2:10)
    at Module._compile (module.js:411:26)
    at Object..js (module.js:417:10)
    at Module.load (module.js:343:31)
    at Function._load (module.js:302:12)
    at Array.<anonymous> (module.js:430:10)
    at EventEmitter._tickCallback (node.js:126:26)

私の.bash_profileは次のようになります。

export PATH=/usr/local/mysql/bin:$PATH
export NODE_PATH=/usr/local/lib/node_modules
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/"

助けていただければ幸いです。ライブラリをインポートできない理由がわかりません。

4

9 に答える 9

141

npm >=1.0 を使用している場合はnpm link <global-package>、既にグローバルにインストールされているパッケージへのローカル リンクを作成するために使用できます。(注意: OS はシンボリックリンクをサポートしている必要があります。 )

ただし、これには問題がないわけではありません。

npm link は開発ツールです。ローカルの開発ボックスでパッケージを管理するのは素晴らしいことです。しかし、npm リンクを使用してデプロイすると、基本的に問題が発生します。これにより、気付かないうちに物事を簡単に更新できるようになるためです。

別の方法として、パッケージをローカルにインストールすることも、グローバルにインストールすることもできます。

詳細については、次を参照してください。

于 2011-11-01T18:56:17.030 に答える
25

以下のようにパッケージをグローバルにインストールします。

$ npm install -g replace  // replace is one of the node module.

この置換モジュールはグローバルにインストールされるため、ノード モジュール フォルダーが表示される場合、そこに置換モジュールが表示されないため、require('replace') を使用してこのパッケージを使用することはできません。

require を使用すると、ノードモジュールフォルダーに存在するローカルモジュールのみを使用できるためです。

グローバルモジュールを使用するには、以下のコマンドを使用してノードモジュールパスにリンクする必要があります。

$ npm link replace

戻ってノード モジュール フォルダを確認すると、そこに置換モジュールが表示され、ローカル ノード モジュールにリンクされているため、アプリケーションで require('replace') を使用して使用できます。

さらに説明が必要な場合はお知らせください。

于 2015-11-27T07:57:12.613 に答える
16

グローバル モジュール ディレクトリへのパスを引数として require を使用できます。

require('/path/to/global/node_modules/the_module');

私のMacでは、これを使用します:

require('/usr/local/lib/node_modules/the_module');

グローバルモジュールの場所を見つける方法は? --> npm はどこにパッケージをインストールしますか?

于 2016-09-15T06:00:26.413 に答える
9

グローバル フォルダーを指すように環境変数 NODE_PATH を設定しnode_modulesます。

Windows 7 以降ではパスは次のよう%AppData%\npm\node_modulesになりますが、UNIX では次のようになります/home/sg/.npm_global/lib/node_modules/が、ユーザーの構成によって異なります。

このコマンドnpm config get prefixは、正しいパスを見つけるのに役立ちます。

UNIX システムでは、次のコマンドで実行できます。

export NODE_PATH=`npm config get prefix`/lib/node_modules/
于 2018-05-28T06:12:20.177 に答える
0

私はドッカーを使用しています。ノードの依存関係がすべてインストールされている Docker イメージを作成しようとしていますが、コンテナーの実行時にローカル アプリ ディレクトリを使用できます (node_modules ディレクトリまたはリンクで汚染することはありません)。これにより、このシナリオで問題が発生します。私の回避策は、require('/usr/local/lib/node_modules/socket.io') など、モジュールの正確なパスから require することです。

于 2016-01-28T16:02:47.390 に答える
-2

require.paths is deprecated.

Go to your project folder and type

npm install socket.io

that should install it in the local ./node_modules folder where node will look for it.

I keep my things like this:

cd ~/Sites/
mkdir sweetnodeproject
cd sweetnodeproject
npm install socket.io

Create an app.js file

// app.js
var socket = require('socket.io')

now run my app

node app.js

Make sure you're using npm >= 1.0 and node >= 4.0.

于 2011-11-01T19:01:09.787 に答える