pkg打包Node.js可执行文件未包含settings目录文件如何解决
pkg打包未包含settings目录文件的解决方法
你之前配置不生效的核心原因:pkg不会读取package.json根层级的assets字段,资源配置必须放在pkg配置节点下才能被识别。
正确配置步骤
- 修正package.json配置结构
把assets规则移动到package.json的pkg字段内,不需要重复写两条匹配规则,settings/**/*已经可以递归覆盖目录下所有层级的文件,正确配置示例:{ "name": "your-app", "version": "1.0.0", // 保留原有其他package.json配置 "pkg": { "assets": [ "settings/**/*" ] } } - 修正代码里的文件读取路径
打包后pkg会把资源挂载到虚拟文件系统,不要用硬编码绝对路径读文件,统一用__dirname拼接相对路径,示例:const path = require('path') // 入口文件在项目根目录时的路径写法 const configFile = path.join(__dirname, 'settings/config.json') const csvRoot = path.join(__dirname, 'settings') - 重新执行打包
配置完成后重新运行pkg .即可,打包过程中终端会打印所有被纳入的资源文件,可以直接检查settings下的文件是否在列表中。
如果不想改package.json,也可以直接在打包命令里显式指定资源路径:pkg . --assets "settings/**/*"
异常排查点
如果按上面配置还是不生效,逐一检查:
- 确认settings目录没有被
.pkgignore或.gitignore规则命中,被忽略的文件pkg不会打包 - 如果使用ES Module规范,不要用和
import.meta.url强绑定的硬编码路径,优先转成CommonJS方式写资源读取逻辑,或者显式指定路径匹配规则 - 确认settings目录是在执行
pkg命令的工作目录下,不要写错相对路径
内容的提问来源于stack exchange,提问作者Webby
相关产品推荐
相关产品推荐

