4

基本的に、require.paths を操作することで可能だったことを行う方法を探しています。edit the paths require は、実行中のプログラム内からモジュールを検索します。

セットアップ(変更できない、またはさまざまな理由で回避策がない)は、子ディレクトリ内にメインの JS ファイルを含むプロジェクトがあることrequire('module')です。プロジェクトフォルダー内の別の特定のディレクトリにある別のディレクトリ

残念ながら、フォルダーを一時的に node_modules に移動することは望ましい解決策ではありません (それが機能する場合でも?)。NODE_PATH 環境変数を 2 つの方法で編集してみました。

  • NODE_PATH='$NODE_PATH:/home/garmur/moduledir'これは機能しますが、実際のソリューションとしては望ましくありません。
  • process.env.NODE_PATH += '/home/garmur/moduledir';プログラム内から、何の効果もないように見えますか?

これに関する任意の助けをいただければ幸いです。ここではnode_modulesなどを使用することが望ましい解決策であることは知っていますが、このプロジェクトのレイアウトに関しては私の手が縛られています。

4

2 に答える 2

2

これは「プライベート」メソッド呼び出しを使用するためハッキーですが、機能します。これは、Mocha テストでパスを正常にするために行っています。

process.env.NODE_PATH += ':src'; //append custom path to NODE_PATH
require('module').Module._initPaths();

アプリの起動またはブートストラップ実行の一部としてそれを実行するだけです。次に、そのコードが実行された後、どこでも src に関連するものを要求できます。

于 2015-08-13T18:51:27.130 に答える
0

おそらく、モジュールのロードに相対パスを使用してみることができます。これはまさにあなたが求めているものではありませんが、「node_modules」ディレクトリからモジュールをロードする必要がある場合のオプションになる可能性があります。

たとえば、次の構造を使用します。

$APP_DIR/server.js
$APP_DIR/mymodules/handlers.js
$APP_DIR/mymodules/utils.js
$APP_DIR/node_modules/...

server.js 内で以下を使用できます。

var h = require('./mymodules/handlers'),
    u = require('./mymodules/utils');

そして、handlers.js 内で以下を使用できます。

var u = require('./utils')
于 2013-03-02T11:58:34.957 に答える