0

我正在创建我的第一个 Node.js 模块,并且很难确定处理此问题的最佳方法。接收用户输入的模块文件路径的推荐方法是什么?那我该如何解决那在哪里?用户调用我的模块的位置和运行代码的位置位于两个不同的位置。

让我们更进一步。假设用户有一个 JSON 配置文件,其中包含这些路径的数组(在 config/settings.json 中):

{
  "paths": [
    "../path1",
    "path2",
    "/path/to/path3",
    "~/path4"
  ]
}

现在显然这些路径是相对于配置文件的,而不是任何执行代码。这感觉不对,因为现在我的方法必须接受__dirname、 配置文件相对于 的路径__dirname等。

var mymodule = require('mine');
mymodule(__dirname, './config/settings.json');

我从配置中读取的任何文件都必须基于此配置文件的位置。这感觉很奇怪。建议?

4

2 回答 2

0

FileUtils来源:

var updateFileProperties = function (file, path){
    file._path = null;
    file._usablePath = null;
    file._isAbsolute = false;

    if (path === undefined || path === null) return;

    path = PATH.normalize (path);

    var index = path.indexOf (":") + 1;
    var windowsRoot = path.substring (0, index);
    path = path.substring (index);

    //https://github.com/joyent/node/issues/3066
    if (path[0] === "/" && path[1] === "/"){
        path = path.replace (/[\/]/g, "\\");
        path = path.substring (0, path.length - 1);
    }

    file._isAbsolute = path[0] === SLASH;
    file._path = windowsRoot + path;
    file._usablePath = file._isAbsolute ? file._path : (windowsRoot + PATH.join (file._relative, path));
};

var File = function (path){
    var main = process.mainModule.filename;
    var cwd = main.substring (0, main.lastIndexOf (SLASH));
    var relative = PATH.relative (process.cwd (), cwd);

    this._relative = relative;
    //...omitted

    updateFileProperties (this, path);
};

这段代码解决了相对路径问题。 _usablePath包含真实路径。这 ”。” path 将是主文件所在的目录。不管怎么调用,都会指向预期的目录。

您可以测试打印new File (<path>).getPath ()返回内容的函数。

于 2012-05-07T10:57:35.180 回答
0

我会避免复杂性,只选择绝对路径。大多数用户都会做 __dirname + '../relativepath' 。(至少那是我所做的)。

于 2012-05-06T23:47:00.753 回答