[英]Node JS pkg executable not able to read files from outside?
我有一个 JS 脚本,我使用 pkg --public filename.js 将其打包成可执行文件
我想从这样的文件中读取数据:
let filename = __dirname + "/data/streets_profiles.csv"
fs.createReadStream(filename)
.pipe(parse({ delimiter: ',' }))
.on('data', (r) => {
//console.log("r: ", r);
data.push(r);
})
.on('end', async () => {
//... do something
虽然当我在 VS 代码 powershell 中使用node filename.js运行脚本时这很有效,但当我将脚本打包成可执行文件时,我从可执行文件中得到了这个错误
我找到了一个解决方案,将我想要读取的 csv 文件路径添加到package.json资产中,但我希望能够在不创建另一个可执行文件的情况下更改这个 csv 文件中的数据,并且它不是锁定在可执行文件中作为资产,而不是作为可以由 exe 读取的独立可编辑文件,有什么方法可以实现这一点或任何更好的方法来创建没有这些限制的可执行文件?
因此,经过长时间的研究,我发现打包的可执行文件对我来说位于 C:/snapshots 中,所以获取__dirname
是没用的,但是path.dirname(process.execPath)
解决了我的问题,因为它可以获得文件的实际位置和因此启用了对同一目录中的文件的操作
我听从了这里的建议并让它发挥作用。
基本上,用process.cwd()
替换所有出现的__dirname
让它工作。
注意:简单的查找和替换将不起作用。 您还需要从所有事件中删除任何额外的相对路径,例如“../../”。 所以
path.join(__dirname, '../../', 'uploads')
会变成path.join(process.cwd(), 'uploads')
最终,
.env
加载就好了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.