规范化node.js中的文件路径

时间:2013-06-28 21:35:49

标签: node.js

我有一个带有filename参数的node.js脚本,然后使用require()消耗它:

json2csv.js

var filename = process.argv[2]; 
var parsedJSON = require(filename);

我按如下方式运行:

$ node json2csv.js ./inputFile.json

只要我使用“./”显式地为文件(如果是本地)添加前缀或者使用绝对文件路径,这就可以工作。但是,如果我省略“./”,例如:

$ node json2csv.js inputFile.json

我收到“无法找到模块”错误,因为node正在将文件名解释为模块名称。是否有一种标准的方法来在节点中使用munge文件路径,以便它们作为显式本地路径输出或绝对路径输出?

我知道为我的场景写作并不困难;我只是在寻找一种适用于跨平台的标准方法。我发现Path.normalize(),但实际上剥离了任何领先的“./”。

谢谢!

2 个答案:

答案 0 :(得分:6)

您可以使用path.resolve(),可选择将process.cwd()传递给 from

var path = require('path');
var filepath = path.resolve(process.cwd(), process.argv[2]);

示例:

console.log(path.resolve('/foo/bar', 'baz'));   // "/foo/bar/baz"
console.log(path.resolve('/foo/bar', './baz')); // "/foo/bar/baz"
console.log(path.resolve('/foo/bar', '/baz'));  // "/baz"

但是,要避免使用require() caching,您应该直接阅读该文件:

fs.readFile(filepath, function (err, jsonData) {
    var result = JSON.parse(jsonData);
});

答案 1 :(得分:4)

你真的不应该那样使用require。相反,你应该这样做:

var parsedJSON = JSON.parse(fs.readFileSync(filename));