2013-07-12 8 views
5

他のノードのjsファイルからノードjsファイルを簡単に実行することは可能ですか? たとえば、私はtest1.jsとtest2.jsの2つのファイルを持っています。私はtest2.jsからtest1.jsファイルを実行したいと思います。node.jsに外部ファイルをロードして実行する

+0

*実行*とはどういう意味ですか? test1.jsで 'require( 'test2.js')'を実行するとどう違うのですか? – adrianp

+0

@adrianp "node test1.js"このようにして、ノードjsファイルを実行または実行しています。私はtest2.jsからtest1.jsを実行したいです – sudhakar

+0

@sudhakar、あなたは[このような](http://www.dzone.com/snippets/execute-unix-command-nodejs)について話していますか? – kentcdodds

答えて

8

あなたがしようとしていることを達成するより良い方法は、私の他の答えが示唆していることをすることだと思います。しかし、質問が示唆するようにコマンドラインでコマンドを実行するには、child_process.execを使います。例:

var exec = require('child_process').exec, 
    child; 

child = exec('node test2.js {{args}}', 
    function (error, stdout, stderr) { 
    console.log('stdout: ' + stdout); 
    console.log('stderr: ' + stderr); 
    if (error !== null) { 
     console.log('exec error: ' + error); 
    } 
}); 
10

require('test2.js')を実行し、エクスポートされたオブジェクトで関数を呼び出します。 documentation on modules

ノードには、単純なモジュールローディングシステムがあります。ノードでは、ファイルとモジュールは1対1で対応しています。一例として、foo.jsはモジュールcircle.jsを同じディレクトリにロードします。 foo.jsはの

内容:

var circle = require('./circle.js'); 
console.log('The area of a circle of radius 4 is ' + circle.area(4)); 

circle.jsを内容:

var PI = Math.PI; 

exports.area = function (r) { 
    return PI * r * r; 
}; 

exports.circumference = function (r) { 
    return 2 * PI * r; 
}; 

あるcircle.jsは、(機能エリアをエクスポート)と円周()を有しています。オブジェクトをエクスポートするには、特別なエクスポートオブジェクトに追加します。

エクスポートはmodule.exportsへの参照であり、拡張にのみ適していることに注意してください。コンストラクタなどの単一項目をエクスポートする場合は、代わりにmodule.exportsを直接使用することをお勧めします。

function MyConstructor (opts) { 
    //... 
} 

// BROKEN: Does not modify exports 
exports = MyConstructor; 

// exports the constructor properly 
module.exports = MyConstructor; 

モジュールのローカル変数はプライベートになります。この例では、変数PIはcircle.jsに対してprivateです。

モジュールシステムは、require( "module")モジュールに実装されています。

+1

ええと...この回答がなぜ投票に失敗したのか分かりません。受け入れられた答えではないにしても、モジュールとやりとりする正しい方法です... – kentcdodds

+3

私はそれをモジュールにすれば、それを単独で実行することはできません。私はいくつかのタスクのために別々のスクリプトを用意し、必要なすべてのタスクを指定された順序で実行できるいくつかのディスパッチャスクリプトを用意しています。私のタスクがエクスポートされたモジュールである場合、私はこれらのタスクを単独で実行することはできません。タスクを実行するためにいくつかのラッパースクリプトを作成する必要があります。 – JustAMartin

関連する問題