我正在使用pkg为我的node js应用程序创建可执行文件。这很好。但是,我也使用config module根据环境加载yaml配置文件。使用pkg打包应用程序时,我指定应包含config文件夹。
"pkg": {
"assets": [
"config/*"
]
}
运行pkg . --debug
时,可以看到配置文件已打包。但是,如果我随后重命名配置文件夹,删除该文件夹,或者只是将新打包的exe移到另一个文件夹,它会显示No configurations found in configuration directory:C:\Users\me\folderwithexe\config
(该配置目录不存在,因为我将exe移到了新文件夹)
据我所知,config
模块似乎正在寻找相对于exe执行位置的config文件夹。即使它位于打包的exe文件中,也无法从中获取它。因此,如果要在另一台计算机上运行该exe文件(这是计划中的文件),则它将在exe文件外部查找config文件夹。其他模块似乎都没有此问题。就是这个配置模块。
有什么想法可以使pkg
模块和config
模块一起工作吗?
这是我完整的package.json
{
"name": "my-app",
"version": "1.0.0",
"description": "",
"main": "app.js",
"author": "Me",
"license": "UNLICENSED",
"dependencies": {
"config": "^3.3.1",
"js-yaml": "^3.14.0",
},
"bin": "app.js",
"pkg": {
"assets": [
"config/*"
]
}
}
答案 0 :(得分:0)
pkg 将捆绑每个 require 依赖项和它在配置列表(资产和脚本)中找到的每个资产或脚本。所以,首先你需要让你的配置文件远离 pkg。
为了使 pkg 远离您的配置文件,您可以使用 pkg 无法解析的变量路径,例如:
const config = require(path.join(__dirname, 'config/config.json'));
此时 pkg 不会捆绑您的配置文件,但是如果您运行构建,您会注意到 config.json 的路径类似于 /snapshot/config/config.json
(https://www.npmjs.com/package/pkg#snapshot-filesystem)>
另一种方法是使用 process.execPath
从二进制路径获取配置文件:
const config = require(path.join(process.execPath, "../","./config/config.json"));
之后,可执行文件将从运行目录的“相对路径”中获取配置文件。
我不使用配置模块进行测试,但我认为如果您从 assets: ["config/*"]
的 pkg 属性中删除 package.json
并将新路径添加到配置模块(如上),它将起作用。
process.env["NODE_CONFIG_DIR"] = path.join(process.execPath, "../","./config/");
const config = require("config");