繁体   English   中英

Node JS pkg 可执行文件无法从外部读取文件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM