Javascript 使用node pkg使用npm config创建可执行文件
我正在使用为我的node js应用程序创建一个可执行文件。这很有效。但是,我还使用基于环境加载yaml配置文件。当使用pkg打包应用程序时,我指定应该包括config文件夹Javascript 使用node pkg使用npm config创建可执行文件,javascript,node.js,npm,yaml,Javascript,Node.js,Npm,Yaml,我正在使用为我的node js应用程序创建一个可执行文件。这很有效。但是,我还使用基于环境加载yaml配置文件。当使用pkg打包应用程序时,我指定应该包括config文件夹 "pkg": { "assets": [ "config/*" ] } 当我运行pkg时--调试,我可以看到配置文件正在打包。但是,如果我随后重命名配置文件夹,删除该文件夹,或者只是将新打包的exe移到另一个文件夹中,则会显示在
"pkg": {
"assets": [
"config/*"
]
}
当我运行pkg时--调试
,我可以看到配置文件正在打包。但是,如果我随后重命名配置文件夹,删除该文件夹,或者只是将新打包的exe移到另一个文件夹中,则会显示在配置目录C:\Users\me\folderwithexe\config中找不到任何配置(此配置目录不存在,因为我将exe移到了一个新文件夹)
据我所知,config
模块似乎正在查找与exe执行位置相关的配置文件夹。它不会从打包的exe文件中获取它,即使它在那里。因此,如果您要在另一台计算机上运行此exe(这是计划),那么它将在exe之外查找配置文件夹。其他模块似乎都没有此问题。只是这个配置模块
你知道如何让pkg
模块和config
模块协同工作吗
这是我的完整包。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/*"
]
}
}
pkg将捆绑它在配置列表(资产和脚本)中找到的每个require dependency和每个资产或脚本。因此,首先需要将配置文件远离pkg
要使pkg远离配置文件,可以使用pkg无法解析的变量路径,例如:
const config = require(path.join(__dirname, 'config/config.json'));
此时,pkg不会捆绑您的配置文件,但是如果您运行构建,您会注意到config.json的路径类似于/snapshot/config/config.json
()
另一种方法是使用进程从二进制路径获取配置文件。execPath
:
const config = require(path.join(process.execPath, "../","./config/config.json"));
之后,可执行文件将从运行目录的“相对路径”获取配置文件
我不使用配置模块进行测试,但我认为如果您从package.json
的pkg属性中删除资产:[“config/*”]
,并将新路径添加到配置模块(如上所示),它就会工作
process.env["NODE_CONFIG_DIR"] = path.join(process.execPath, "../","./config/");
const config = require("config");