Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js-如何获取相对路径?_Javascript_Node.js - Fatal编程技术网

Javascript Node.js-如何获取相对路径?

Javascript Node.js-如何获取相对路径?,javascript,node.js,Javascript,Node.js,我有一个模块是这样工作的: /helpers/importer/Import.js 我使用它动态导入模块属性,例如以下“URL”模块: /示例/url.js 我是这样做的: /示例/myExecutingModule.js 我这里的问题是,与堆栈溢出上的其他人不同,他们希望在他们的需求中使用绝对路径,而我希望相反。我想为我的导入函数提供与所需相同的路径——与myExecutingModule.js相关的路径,在本例中:“./URL”。然而,我的“导入器”函数似乎比“require”函数具有闭包,

我有一个模块是这样工作的:

/helpers/importer/Import.js

我使用它动态导入模块属性,例如以下“URL”模块:

/示例/url.js

我是这样做的:

/示例/myExecutingModule.js

我这里的问题是,与堆栈溢出上的其他人不同,他们希望在他们的需求中使用绝对路径,而我希望相反。我想为我的导入函数提供与所需相同的路径——与myExecutingModule.js相关的路径,在本例中:“./URL”。然而,我的“导入器”函数似乎比“require”函数具有闭包,该函数与其路径相关。是否有任何方法将其写入“require”相对于调用importer()的模块?当我输入这个时,感觉唯一的方法就是将“require”传递到Import.js模块中,我觉得这有点。。。可笑的

编辑:在进一步思考之后,我猜答案涉及对调用模块的require函数进行导入闭包,如下所示:

var Import = require('../helpers/Import')(require);
然后Import.js中的导出将

module.exports = function (require) { [...] return importer; };

使导入器函数中的“require”成为调用模块将使用的实际require函数。我还没有尝试过这个,我正在等待一个更好的答案,所以我将暂时保留这个问题

您可以使用设置为当前模块所在目录的
\u dirname
。例如:
\uu dirname+'/url'

尝试该包。到目前为止,我已经在节点0.10和io.js 2.3的生产环境中使用了它,没有任何问题


这是我现在使用的解决方案。将“require”从调用模块传递给导入模块,使其相对于调用模块的位置导入

var import = require('../helpers/Import')(require);
var URL = import('./URLs');
然后Import.js使用调用模块的require而不是自己的require:

module.exports = function (require) {
  function importer(requiredModulePath) {

    [ ... ]

    var requiredModule = require(requiredModulePath);
    return requiredModule[toImport] || requiredModule.default || requiredModule;
  }

  return importer;
};

感觉有点奇怪,但是,你能做什么?

是的,我考虑过类似的事情,但这不允许我传递到“Import.js”的路径与传递到“require(str)”的路径相同——也就是说,我特别希望以传递“/url.js”的方式编写Import.js。我希望这样做的原因之一是,我的IDE可以告诉我的文件在我的系统中的位置。另一个是,无论我使用的是require()还是Import()模块,路径都是可以互换的。我认为这实际上与我想要的相反?
module.exports = function (require) { [...] return importer; };
var import = require('../helpers/Import')(require);
var URL = import('./URLs');
module.exports = function (require) {
  function importer(requiredModulePath) {

    [ ... ]

    var requiredModule = require(requiredModulePath);
    return requiredModule[toImport] || requiredModule.default || requiredModule;
  }

  return importer;
};