2013-07-12 13 views
5

è facile/possibile eseguire un file js nodo da un altro file js del nodo? Per esempio, sto avendo due file test1.js e test2.js. voglio eseguire il file test1.js da test2.js.Carica ed esegue il file esterno in node.js

+0

Cosa intendete per * esecuzione *? Come sarebbe diverso dal fare 'require ('test2.js')' in test1.js? – adrianp

+0

@adrianp "nodo test1.js" in questo modo stiamo eseguendo o eseguendo i file js del nodo. voglio eseguire test1.js da test2.js – sudhakar

+0

@sudhakar, stai parlando di qualcosa [come questo] (http://www.dzone.com/snippets/execute-unix-command-nodejs)? – kentcdodds

risposta

8

Penso che il modo migliore per realizzare ciò che si sta tentando di fare sarebbe quello di fare quello che suggerisce la mia altra risposta. Ma per eseguire comandi sulla riga di comando come suggeriscono le tue domande, si desidera utilizzare child_process.exec. Ad esempio:

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

È sufficiente eseguire require('test2.js') e quindi chiamare una funzione sull'oggetto esportato. Da documentation on modules:

Il nodo dispone di un semplice sistema di caricamento del modulo. Nel nodo, i file e i moduli sono in corrispondenza uno a uno. Ad esempio, foo.js carica il modulo circle.js nella stessa directory.

I contenuti di foo.js:

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

Il contenuto di circle.js:

var PI = Math.PI; 

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

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

I circle.js modulo ha esportato nell'area funzioni() e la circonferenza(). Per esportare un oggetto, aggiungere all'oggetto esportazioni speciali.

Si noti che le esportazioni sono un riferimento a module.exports rendendolo adatto solo per la conversione. Se si sta esportando un singolo oggetto come un costruttore, si vorrà utilizzare invece module.exports direttamente.

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

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

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

Le variabili locali del modulo saranno private. In questo esempio la variabile PI è privata di circle.js.

Il sistema del modulo è implementato nel modulo require ("module").

+1

Um ... Non so perché questa risposta abbia ottenuto un voto negativo. È il modo corretto di interagire con i moduli anche se non è la risposta accettata ... – kentcdodds

+3

Se creo un modulo, non sarò in grado di eseguirlo da solo. Dispongo di script separati per alcune attività e quindi di alcuni script di dispatcher in grado di eseguire tutte le attività richieste nell'ordine specificato. Se le mie attività sono come moduli con esportazioni, non posso eseguire queste attività da solo, dovrò creare uno script wrapper solo per eseguire un'attività. – JustAMartin

Problemi correlati