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.
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; –
* upd. Probieren Sie local.join einfach './' als '' aus, verwenden Sie also absoluten Pfad oder require ('./' + join (_config.path, lang)); –
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