【问题标题】:Cannot find module - relative paths找不到模块 - 相对路径
【发布时间】:2016-07-21 17:52:52
【问题描述】:

我编写了一个非常简单的本地模块来管理几行本地化文本。 它使用节点的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 文件,所以我猜它与路径有关。

【问题讨论】:

  • 在我看来最好使用下一个构造:path.join(__dirname, 'locale'); __dirname 包含绝对路径,您的问题与相对路径有关。您也可以尝试定义文件扩展名 lang = 'en.js';
  • *更新。刚在本地试过,path.join将'./'解析为'',所以使用绝对路径,或者require('./' + join(_config.path, lang));
  • 使用__dirname,它在模块的文件夹中进行搜索。使用require('./' + join(_config.path, lang));,结果与以前相同(找不到模块)。所以,两者都不起作用。
  • 根据文档 __dirname - 当前正在执行的脚本所在目录的名称。哦,废话,它可能与'coffee-script/register'有关吗?您可以尝试在 index.coffe 中打印 __dirname 值吗?它应该有助于组成正确的路径。
  • @NazarSakharenko 当我在index.coffee 中执行console.log(__dirname); 时,它会打印正确的文件夹:/home/ubuntu/workspace(这是在 C9 机器上)。当我将__dirname 放入模块代码中时,它会尝试访问路径/home/ubuntu/workspace/node_modules/lang/locale/en。我应该将__dirname 作为参数传递吗?但是为什么其他模块不这样做呢?常规模块如何处理路径?

标签: javascript node.js coffeescript


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-01-05
    • 2014-06-26
    • 2018-08-24
    • 1970-01-01
    • 2022-11-07
    • 2020-06-05
    • 2021-10-24
    • 2018-02-08
    • 2018-11-25
    相关资源
    最近更新 更多