2017-07-26 7 views
1

クライアントとサーバーのコードを共有しようとしています。オーバーライドでルートから起動し、ノードモジュールの名前を変更せずにノードモジュールをチェックする必要があります。

私は現在、私のビルドツールとしてのWebPACKを使用していると私はクライアントのための私の依存関係がこのような何かを見て、私の資産/ JSのフォルダに解決するために、それを設定している:私が好きな

require('validators/login.js'); 

をサーバー間でまったく同じコードを共有するが、それは必要なので、私は

if server 
    rootRequire.. 
else 
    require 

などはどのような私がしたい何かを行うことができますをやっているサーバーまたはクライアントの場合のステートメントは、チェックインする場合、私は入れたくありません好きなのは、サーバーがクライアントのようにrequireを使用し、ルートディレクトリから開始することです。結果を返さない場合、node_modulesフォルダーを検索するための機能を取り除きたいとは思わない。

また、私のコードをnode_modulesフォルダに置くことなく、これを行うこともできます。

誰かが適切にオーバーライドする方法についていくつかの良い提案がありますか?私はシンボリックリンクやnode_modulesに物を入れるなどのハックの解決方法のほとんどを読んできましたが、私はそれらの答えを探していません。

答えて

0

私は、私が合理的に満足している解決策を思いついたと思います。答えが必要な人と分かち合うと思いました。

var module = require('module'); 
var baseRequire = module.prototype.require; 

module.prototype.require = function() 
{ 
    // Add any extra paths here... 
    var extraPaths = [ 
     __dirname 
    ]; 

    for (var i = 0, len = extraPaths.length; i < len; i++) { 
     if (this.paths.indexOf(extraPaths[i]) == -1) { 
      this.paths.push(extraPaths[i]) 
     } 
    } 

    return baseRequire.apply(this, arguments); 
}; 
関連する問題