找不到模块 - 相对路径

ROA*_*OAL 5 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
Run Code Online (Sandbox Code Playgroud)

相关模块代码

如若require如果尚未加载它的文件.

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

if(!_locales[lang]){
    _locales[lang] = require(join(_config.path, lang));
}
Run Code Online (Sandbox Code Playgroud)

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

module.exports = {
    test: 'Hello World!'
};
Run Code Online (Sandbox Code Playgroud)

本地模块导出一个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');
Run Code Online (Sandbox Code Playgroud)

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

ROA*_*OAL 1

path.join()还规范化创建的路径,这(可能)意味着该./部分始终被删除,剩下的是相对路径。

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