2017-03-01 2 views
0

Je développe une bibliothèque où Je voudrais charger un ou plusieurs fichiers par rapport au requirer. Pour mieux illustrer ceci:Comment demander un fichier par rapport à requirer?

// ~/app.js 
import { horn } from 'unicorn' 
horn.load() 

// ~/node_modules/unicorn/horn.js 
export default { 
    load() { 
    require('./user.config.js') // Here I would like to load the user config 
           // relative to "~/app.js" 
    } 
} 

J'ai essayé d'inspecter la require mondiale et sa propriété parent mais il me donne seulement un nom de fichier sans contexte plus.

Répondre

1

Voici ce que vous avez disponible:

module.parent 

C'est la poignée du module du premier module pour charger ce module. Étant donné que les handles de module sont mis en cache, cela ne reflète que le premier module qui vous a chargé.

module.filename 

Ceci est le nom de fichier complet d'un module. Donc, si vous voulez que le nom complet du module parent, vous pouvez utiliser ceci:

module.parent.filename 

Si vous voulez juste le chemin du module parent afin que vous puissiez charger quelque chose de ce répertoire, vous pouvez diviser hors du chemin du nom de fichier pour obtenir juste le chemin en utilisant le module path.

path.dirname(module.parent.filename) 

Si vous voulez charger un fichier à partir de ce répertoire, vous pouvez le faire:

let fileToLoad = path.join(path.dirname(module.parent.filename), "user.config.js"); 
let config = require(fileToLoad); 

Vous devez vous rappeler la mise en garde ci-dessus que module.parent ne retourne que le premier module vous chargez car après cela le module est mis en cache et seul le handle de module d'origine est renvoyé (il n'est pas rechargé).

+0

Génial! Merci pour les détails et le mot de conseil. Je vais essayer quand j'aurai du temps, puis je reviendrai pour accepter la réponse. –

+0

@RubensMariuzzo - Avez-vous pu l'essayer? Cela a-t-il fonctionné pour vous? Est-il approprié de marquer la meilleure réponse pour indiquer à la communauté que la question est maintenant faite? – jfriend00

+0

Je n'ai pas encore vérifié, mais je le ferai. J'ai été aspiré avec d'autres choses. Pardon! –