我有一个带有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(),但实际上剥离了任何领先的“./”。
谢谢!
答案 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));