You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用pkg打包为可执行文件后无法读取外部CSV文件如何解决?

解决方案

问题根因

pkg打包后运行时,__dirname指向的是exe内部的虚拟文件系统路径,并非exe实际存放的磁盘目录,所以拼接的路径无法定位到外部独立的CSV文件。

直接适配pkg的实现方法

不需要将CSV加入assets配置,只需要修改路径获取逻辑即可:

  1. 首先引入path模块做路径拼接,避免跨平台斜杠兼容问题
  2. 用process.execPath获取当前运行的可执行文件的绝对路径,提取其所在目录作为基础路径
  3. 加环境判断兼容开发、打包两种运行场景

示例代码:

const path = require('path')
const fs = require('fs')
// 区分打包环境和开发环境的基础路径
const baseDir = process.pkg ? path.dirname(process.execPath) : __dirname
const filename = path.join(baseDir, 'data', 'streets_profiles.csv')

// 后续读取逻辑不变
fs.createReadStream(filename)
.pipe(parse({ delimiter: ',' }))
.on('data', (r) => {
    //console.log("r: ", r);
    data.push(r);        
})
.on('end', async () => {
 //... 后续处理
  1. 打包后的使用方式:将存放CSV的data文件夹和生成的exe放在同级目录即可,CSV可任意修改,不需要重新打包。

替代打包工具方案

如果不想用pkg,也可以选择以下无这类路径限制的打包工具:

  • nexe:和pkg功能类似的Node.js单文件打包工具,配置更轻量,外部文件读取逻辑和上述方案完全兼容
  • Bun:用bun build --compile filename.js命令可直接打包为独立可执行文件,打包速度、运行性能都优于pkg,原生支持读取外部文件,不需要额外做特殊适配

内容的提问来源于stack exchange,提问作者S..

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 07:24:03