2013-02-16 1 views
6

目的:このようなファイル昔ながらのJavaScriptから、Node.jsのモジュールまたはRequirejs AMDモジュールを作る:Node.jsにモジュールではないファイルを(モジュールを作るために)含めるには?

var foo = function() {}; 

私はを制御することはできませんし、私はfoo.jsを編集することはできません。

なぜfooは、最初のifの内部にある空白のオブジェクトですか?モジュールにプレーンなJavaScriptファイルを「インクルード」するにはどうすればよいですか? mymodule.jsファイル:requireでロード

(function(root) { 
    if(typeof exports === 'object') { // Node.js 
     var foo = require('./foo'); 

     console.log(foo); // { } 
    } else if (typeof define === 'function' && define.amd) { // RequireJS AMD 
     define(['foo'], function() { 
      return foo; 
     }); 
    } 
}()); 
+0

私は混乱しています。あなたのコードの 'RequireJS'部分で何をしようとしていますか? – loganfsmyth

答えて

4

ノードモジュールは、モジュールが公開することを希望するすべてのものとexportsオブジェクトを移入する必要があります。あなたのケースでは、ファイルが必要なときには何もexportsに追加されないので、それは空として表示されます。したがって、短い答えは何とかfoo.jsの内容を変更する必要があるということです。手動で行うことができない場合は、プログラムで行う必要があります。なぜあなたはそれを支配していないのですか?

foo.jsを適切なモジュールにするためにコード内にコンテンツをプログラムでラップするのが最も簡単です。

// Add an 'exports' line to the end of the module before loading it. 
var originalFoo = fs.readFileSync('./foo.js', 'utf8'); 
fs.writeFileSync('./foo-module.js', originalFoo + "\nexports.foo = foo;"); 
var foo = require('./foo-module.js'); 
+1

私はread + evalを使って解決しました。 Nooはファイルを書き戻す必要があります。 foo.jsは依存関係(自動的にダウンロードされるため)を編集できません。 – gremo

+0

私は何時間も作業を省きました。私の目標は、必要なすべてのグローバルをロードして特定のテストをデバッグすることでした。デバッグしたいテストを呼び出し、必要なファイルパスの配列を関数に渡して解決できますそれはすべての人にevalを呼び出す –

0

あなたは試みることができる:

var fs = require('fs'); 

var foo = fs.readFileSync('foo.js', 'utf8') // Or request it somehow, just get it as a string 

foo += "module.exports.foo = module.exports = foo;"; 

fs.writeFileSync('fooModule.js',foo); 

var foo = require('./fooModule'); 

// foo() and foo.foo() are both the same 

注:これはノードが必要です。

関連する問題