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

ant*_*tun 3 node.js

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

json2csv.js

var filename = process.argv[2]; 
var parsedJSON = require(filename);
Run Code Online (Sandbox Code Playgroud)

我运行如下:

$ node json2csv.js ./inputFile.json
Run Code Online (Sandbox Code Playgroud)

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

$ node json2csv.js inputFile.json
Run Code Online (Sandbox Code Playgroud)

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

我知道为我的场景写作并不困难; 我只是在寻找一种适用于跨平台的标准方法.我找到了Path.normalize(),但这实际上剥离了任何前导"./".

谢谢!

Jon*_*ski 6

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

var path = require('path');
var filepath = path.resolve(process.cwd(), process.argv[2]);
Run Code Online (Sandbox Code Playgroud)

例子:

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"
Run Code Online (Sandbox Code Playgroud)

不过,为了避免缓存使用require(),你应该直接读取文件:

fs.readFile(filepath, function (err, jsonData) {
    var result = JSON.parse(jsonData);
});
Run Code Online (Sandbox Code Playgroud)