Il problema con quello che stavi facendo è che si imposta la variabile dopo l'importazione, ma this.myvariable === 'test';
era stato chiamato quando il modulo è stato importato, prima che la variabile è stata impostata.
È possibile fare in modo che il modulo esporti una funzione e quindi richiamare la funzione quando si importa, passando la variabile come argomento.
module.exports = function(myVar) {
var myModule = {
// has access to myVar
...
};
return myModule;
};
Quando si importa,
var myModule = require('myModule')(myVar);
Se si utilizza questo metodo, tenere a mente che si ottiene una diversa istanza del modulo, ovunque si importa, che non può essere quello che vuoi.
Se si desidera impostare i valori di un modulo dall'esterno del modulo, una buona opzione è quella di fare in modo che il modulo esporti un oggetto con un metodo setter e utilizzarlo per impostare il valore della variabile come proprietà dell'oggetto . Questo rende più chiaro che vuoi che questo valore sia impostabile, mentre solo fare myModule.myVar =
può destabilizzarti in seguito.
module.exports = {
myVar: null,
setMyVar: function(myVar) {
this.myVar = myVar;
},
...
};
In questo caso si accede alla stessa istanza del modello ovunque venga importata.
Modifica in risposta al commento
Nella prima opzione si mostra in cui si ottiene una diversa istanza ogni volta, come posso esportare più funzioni che ogni condividono lo stesso myVar? Se quel modulo esporta 5 funzioni ciascuna che ha bisogno di myVar, posso impostarlo in un posto come al momento dell'importazione piuttosto che passarlo in ogni funzione?
Non del tutto sicuro se ho capito quello che stai descrivendo, ma si potrebbe fare qualcosa di simile:
module.exports = function(myVar) {
var modules = {};
modules.someModule = {...};
modules.anotherModule = {...};
...
return modules;
};
Ognuno di questi sotto-moduli avrebbero accesso allo stesso myVar. Quindi importeresti come sopra e il risultato sarebbe un oggetto contenente ciascuno dei tuoi cinque moduli come proprietà. Non posso dire se questa sia una buona idea, sta diventando piuttosto contorta, ma forse ha senso per la tua situazione.
Pensa all'ordine in cui sta accadendo, poi capirai cosa sta succedendo. –