1. ホーム
  2. node.js

[解決済み】node.jsのrequireをabsoluteにする方法は?(相対的な代わりに)

2022-04-03 16:04:34

質問

現在のモジュールからの相対パスではなく、常にプロジェクトのルートでファイルを要求したいのですが、どうすればいいですか?

例えば https://github.com/visionmedia/express/blob/2820f2227de0229c5d7f28009aa432f9f3a7b5f9/examples/downloads/app.js 6行目には

express = require('../../')

それは本当に悪いことだと思います。例えば、私がすべてのサンプルを1レベルだけルートに近づけたいとします。それは不可能です。なぜなら、30以上の例を更新しなければならないし、それぞれの例の中で何度も更新しなければならないからです。これには

express = require('../')

私の解決策は、ルートベースの特別なケースを持つことです:文字列が$で始まる場合、それはプロジェクトのルートフォルダからの相対的なものです。

何かお手伝いできることがあれば、ぜひお願いします。

アップデート2

現在、私は一つの方法で書くことができ、クライアントとサーバーの両方で動作するrequire.jsを使用しています。Require.jsでは、カスタムパスを作成することもできます。

更新情報3

現在、webpack + gulp に移行し、サーバーサイドでモジュールを処理するために enhanced-require を使っています。その根拠はこちらをご覧ください。 http://hackhat.com/p/110/module-loader-webpack-vs-requirejs-vs-browserify/

解決方法は?

以下は、私が半年以上やっている実際の方法です。私はnode_modulesという名前のフォルダをプロジェクトのルートフォルダとして使っています。この方法では、私が絶対必要条件を呼び出すところから常にそのフォルダを探します。

  • ノードモジュール
    • マイプロジェクト
      • index.js require("./someFolder/hey.js") の代わりに require("myProject/someFolder/hey.js") でOKです。
      • hey.js を含む someFolder

この方法は、フォルダーにネストされている場合に便利で、絶対的な方法で設定されていれば、ファイルの場所を変更する手間が大幅に省けます。私は、この2つの相対指定は アプリ全体 .