找不到模块 - 相对路径

时间:2016-07-21 17:52:52

标签: javascript node.js coffeescript

我写了一个非常简单的本地模块来管理几行本地化文本。 它使用节点require加载语言文件,但我很可能遇到路径问题。 我收到Cannot find module错误。

文件结构

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

相关模块代码

如果文件尚未加载,则应require

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

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

locale目录中的每个文件都是典型的Node.js模块,例如en.js

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

本地模块导出function(req, res, next){},它被用作Express中间件 要将带有本地化字符串的所需对象附加到res.locals,但是,我发现Cannot find module 'locale/en'错误。

我已尝试手动添加.js扩展程序(但就我所知,这不应该是必要的)。 我还尝试了路径上的不同变体,例如locale/locale

该模块在index.coffee中调用 应用程序使用init.js启动,其中包含以下内容:

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

可能只是模块是.js(并且模块本身没有将CoffeeScript作为依赖项),因此它无法加载.coffee文件?虽然CoffeeScript应该在全球注册,或者我错了?无论哪种方式,它都不能与.js文件一起使用,所以我猜它与路径有关。

1 个答案:

答案 0 :(得分:1)

path.join()也会对创建的路径进行规范化,(可能)表示./部分始终被移除,剩下的是相对路径。

相反,当使用path.resolve()时,它会创建一个绝对路径,这就是本例所需的路径。