Napisałem bardzo prosty moduł lokalny do zarządzania kilkoma liniami zlokalizowanego tekstu. Używa węzła require
do ładowania plików językowych, ale najprawdopodobniej mam problemy ze ścieżkami. Otrzymuję błąd Cannot find module
.Nie można znaleźć modułu - ścieżki względne
Struktura plików
.
+-- local_modules
| +-- lang
| | +-- package.json
| | +-- index.js
+-- locale
| +-- en.js
| +-- de.coffee
+-- init.js
+-- index.coffee
+-- package.json
odpowiedniego modułu kod
Gdyby require
plik, jeśli nie jest już załadowany.
join = require('path').join;
_config.path = './locale';
lang = 'en';
_locales = {};
if(!_locales[lang]){
_locales[lang] = require(join(_config.path, lang));
}
Każdy plik w katalogu locale
to typowy moduł node.js, na przykład en.js
:
module.exports = {
test: 'Hello World!'
};
Moduł lokalny eksportuje function(req, res, next){}
, który jest używany jako Express, middleware i rzekomą do dołącz wymagany obiekt z lokalnymi ciągami do res.locals
, ale widzę błąd Cannot find module 'locale/en'
.
Próbowałem ręcznie dodać rozszerzenia .js
(ale to nie powinno być konieczne, o ile wiem). Próbowałem również różnych odmian na ścieżce, takich jak locale
lub /locale
.
Moduł jest wywoływany w index.coffee
.
App jest uruchamiany za pomocą init.js
, który zawiera następujące elementy:
require('coffee-script/register');
require('./index');
może to tylko, że moduł jest .js
(a moduł sam nie posiada coffeescript jako zależność), więc to nie może załadować .coffee
plik? Chociaż CoffeeScript powinien być zarejestrowany na całym świecie, czy też się mylę? Tak czy inaczej, nie działa również z plikiem .js
, więc myślę, że ma to coś wspólnego ze ścieżkami.
Moim zdaniem lepiej użyć następnej konstrukcji: path.join (__ dirname, "locale"); __nazwa zawiera bezwzględną ścieżkę i twój problem związany ze ścieżką względną. Możesz także spróbować zdefiniować rozszerzenie pliku lang = 'en.js'; –
* upd. Po prostu wypróbowano lokalnie, path.join, aby rozwiązać "./" jako "", więc używaj absolutnej ścieżki lub wymagaj ('./' + join (_config.path, lang)); –
Z '__dirname', szuka wewnątrz folderu modułu. Z 'require ('./' + join (_config.path, lang));' wynik jest taki sam jak poprzednio (nie można znaleźć modułu). Więc nie działa. – ROAL