2016-07-21 8 views
5

Ich habe ein sehr einfaches lokales Modul geschrieben, um ein paar Zeilen lokalisierten Textes zu verwalten. Es verwendet Knoten require, um die Sprachdateien zu laden, aber ich habe wahrscheinlich Probleme mit Pfaden. Ich bekomme den Cannot find module Fehler.Modul nicht gefunden - relative Pfade

Dateistruktur

. 
+-- local_modules 
| +-- lang 
| | +-- package.json 
| | +-- index.js 
+-- locale 
| +-- en.js 
| +-- de.coffee 
+-- init.js 
+-- index.coffee 
+-- package.json 

Relevante Modulcode

Sollte die Datei require wenn es nicht bereits geladen wird.

join = require('path').join; 
_config.path = './locale'; 
lang = 'en'; 
_locales = {}; 

if(!_locales[lang]){ 
    _locales[lang] = require(join(_config.path, lang)); 
} 

Jede Datei im Verzeichnis locale ist ein typisches Node.js Modul, zum Beispiel en.js:

module.exports = { 
    test: 'Hello World!' 
}; 

Das lokale Modul exportiert eine function(req, res, next){}, die als Express Middleware verwendet wird, und soll zu Befestigen Sie das erforderliche Objekt mit lokalisierten Zeichenfolgen auf res.locals, jedoch sehe ich Cannot find module 'locale/en' Fehler.

Ich habe versucht, die .js Erweiterungen manuell hinzuzufügen (aber das sollte nicht notwendig sein, soweit ich weiß). Ich habe auch verschiedene Variationen auf dem Pfad versucht, wie locale oder /locale.


Das Modul wird in index.coffee aufgerufen.
App wird mit init.js ins Leben gerufen, die die folgenden enthält:

require('coffee-script/register'); 
require('./index'); 

Vielleicht ist es nur, dass das Modul ein .js (und das Modul selbst nicht Coffeescript als Abhängigkeit hat), so dass es ein .coffee nicht geladen werden kann Datei? Obwohl CoffeeScript global registriert werden sollte, oder irre ich mich? Wie auch immer, es funktioniert auch nicht mit der Datei .js, also denke ich, dass es etwas mit Pfaden zu tun hat.

+0

Meiner Meinung nach ist es besser, die nächste Konstruktion zu verwenden: path.join (__ dirname, 'locale'); __dirname enthält den absoluten Pfad und Ihr Problem bezieht sich auf den relativen Pfad. Sie können auch versuchen, die Dateierweiterung lang = 'en.js' zu definieren; –

+0

* upd. Probieren Sie local.join einfach './' als '' aus, verwenden Sie also absoluten Pfad oder require ('./' + join (_config.path, lang)); –

+0

Mit '__dirname' wird im Ordner des Moduls gesucht. Mit 'require ('./' + join (_config.path, lang));' ist das Ergebnis dasselbe wie vorher (Modul kann nicht gefunden werden). Also, funktioniert nicht. – ROAL

Antwort

1

path.join() normalisiert auch die erzeugte Pfad, der (wahrscheinlich) bedeutet das ./ Teil immer entfernt wurde, und was blieb, war ein relativer Pfad.

Wenn stattdessen path.resolve() verwendet wird, wird ein absoluter Pfad erstellt, der in diesem Fall benötigt wird.