2010-12-02 4 views
1

J'ai un fichier aller chercher d'autres fichiers:Changer de dossier en cours dans Node.js

start.js

require("./users"); 

mais le fichier users.js est pas dans le dossier en cours, mais dans le modèle /.

Je veux être en mesure d'exécuter:

node start.js model 

et il suppose que le même est ./ comme modèle/en start.js.

Comment faire cela?

Répondre

2

Tout ce que vous devez faire est de faire en sorte que Node.js reconnaisse le dossier model en tant que module. Pour ce faire, vous devez placer un fichier appelé index.js dans le dossier model. Pour cela, vous devez placer un fichier appelé index.js dans le dossier model.

// model/index.js 
exports.users = require('./users'); // model/users.js 
exports.posts = require('./posts'); // model/posts.js 
// etc. 

Vous pouvez maintenant importer le module model et accéder à ses exportations:

var models = require('./model'); 
models.users.create(); // some function exported in model/users.js 
models.posts.list(); // this was exported in model/posts.js 
0

Vous pouvez ajouter ./model dir tableau require.paths:

require.paths.unshift("./model"); 
var 
    users = require("users"), // It works! 
    posts = require("posts"); 

Mais je veux vous demander: pourquoi avez-vous besoin de cela au lieu d'utiliser

var 
    users = require("./model/users"), // It works! 
    posts = require("./model/posts"); 

?

+0

C'est stupide, ajouter des trucs aux chemins n'est pas encouragé d'aucune façon, et il ne voulait pas utiliser le préfixe 'model'. L'utilisation de l'approche 'index.js' est la façon normale de faire cela, NPM encapsule tous les modules installés de cette façon. –

+0

Je suis d'accord que l'ajout des chemins est une mauvaise pratique. Mais personnellement j'utiliserais './Model/users' pour la lisibilité – Raynos

+0

Eh bien, s'il veut distribuer une lib entière avec plusieurs sous-modules, alors l'approche' index.js' est toujours la meilleure, donne une meilleure vue en boîte noire aussi . –