1

requireの複数のパスをどのように構成する必要がありますか?

私は次の構造を持っています:

application
|-server
| |-main.js
| |-myClass.js
| |-myClass.js
| |-implementationClass.js
|-common
| |-myOtherClass.js
| |-anotherClass.js
| |-yetAnotherClass.js
|-client
| |-aClientClass.js
| |-anotherClientClass.js
| |-implementationClass.js

私はこのようなことをしたいです:

require('myClass');
require('myOtherClass');

複数のパスをどのように構成する必要がありますか?現在使用しrequire.pathsているとエラーが発生します:Error: require.paths is removed.

アプリケーションは共有から静的.jsファイルを提供する必要があり、サーバー側のファイルの共有を避けたいので、この構造を維持したいと思い.jsます。

また、ファイルは、node.js require()をエミュレートするクライアントでrequire()関数を使用しており、相対パスを使用したくありません。

キャッチは、私が呼び出すとき、require('anotherClass')それはクライアントとサーバーで動作しなければならないということです。したがって、相対パスを使用することは機能require('implementationClass')しますが、クライアント実装またはサーバー実装のいずれかを返すものもあり、commonクラスから呼び出されると、このアプローチは失敗します。

4

2 に答える 2

1

サブモジュールを要求するベスト プラクティスは、相対パスを使用することです。

require('./server/myClass');
require('./common/myOtherClass');

requirejs を使用している場合は、クライアント側のエイリアスを構成できます。

require.config({
    baseUrl: "http://example.com/static/",
    paths: {
        "myClass": "./server/myClass",
        "myOtherClass": "./common/myOtherClass"
    }
});

上記のようなことを行うことをお勧めしますが、本当にグローバルに要求できるようにしたい場合はNODE_PATH、アプリを起動する前に環境変数を設定または変更できます。require.paths問題が発生しただけなので削除されました。

于 2013-01-02T22:04:42.247 に答える
0
global.mod = function (file){
    return require (path.resolve ("../..", file));
};

var myClass = mod ("server/myClass");
var myOtherClass = mod ("common/myOtherClass");

独自のモジュールの相対パスで require を使用することは、非常に* 1/0の醜く悪いアプローチです。

于 2013-01-02T22:36:10.300 に答える