【问题标题】:node.js require from parent foldernode.js 需要来自父文件夹
【发布时间】:2017-02-10 15:31:00
【问题描述】:

我有以下结构:

-- node_modules
-- websites
---- common
------- config.js
---- testing
------- test.js

在配置中我设置了一些变量,这些变量正在使用 module.export 导出。

我在使用以下代码从 config.js 运行 node test.js 时尝试检索这些变量:

var configData = require('./common/config.js')
var configData = require('../common/config.js')

它们都不起作用。如何从其他文件夹中检索数据?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:
    var configData = require('./../common/config.js');
    
    1. ./ 是testing/

    2. ./../ 是websites/

    3. ./../common/ 是websites/common/

    4. ./../common/config.js 是websites/common/config.js

    【讨论】:

    • - 找不到模块
    • @PHPLover 立即查看!
    【解决方案2】:

    来自 test.js:

    const configData = require('../common/config');
    

    您可以放心地省略'.js'。

    正如documentation 所说:

    文件模块

    如果没有找到确切的文件名,Node.js 将尝试加载所需的文件名并添加扩展名:.js, .json,最后是 .node。

    .js 文件被解释为 JavaScript 文本文件和 .json 文件 被解析为 JSON 文本文件。 .node 文件被解释为已编译 加载了 dlopen 的插件模块。

    以“/”为前缀的必需模块是文件的绝对路径。 例如, require('/home/marco/foo.js') 将加载文件 /home/marco/foo.js.

    以“./”为前缀的必需模块是相对于文件调用的 要求()。即 circle.js 必须和 foo.js 在同一目录下 供 require('./circle') 找到它。

    如果没有前导“/”、“./”或“../”来表示文件,则模块 必须是核心模块或从 node_modules 文件夹加载。

    如果给定的路径不存在,require() 将抛出一个错误 其代码属性设置为“MODULE_NOT_FOUND”。

    更多关于require()如何工作here的信息。

    【讨论】:

    • 您不需要.js 扩展吗?
    • 不需要,在模块加载时从require()函数自动添加。
    • 明白了。那么这个答案与 OP 已经尝试过但不起作用的答案有何不同?为什么会这样呢?
    • 还是找不到从test.js调用的模块?
    • 删除文件名末尾的“.js”并不能回答关于在父目录中导入文件的原始问题。
    【解决方案3】:
    const cheerio = require('../node_modules/cheerio');
    const request = require('../node_modules/request-promise');
    const vl = require('../node_modules/validator');
    const crypto = require('crypto');
    const fs = require('fs');
    

    【讨论】:

    • 一个好的答案将始终包括解释为什么这会解决问题,以便 OP 和任何未来的读者可以从中学习。
    猜你喜欢
    • 2014-03-02
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 2018-10-09
    相关资源
    最近更新 更多