我使用节点pkg
创建我的nodejs服务的.exe:https://www.npmjs.com/package/pkg
我的问题是:我如何使.exe使用config.js来获取某些设置值?基本内容,例如ip,端口,数据库名称等。因为我有3个环境,希望对所有文件使用相同的exe,但对每个文件使用不同的config.js文件。
到目前为止,如果我执行pkg app.js
,它将创建一个不查看任何其他文件的.exe。完全独立。 config.js
启动时如何看待它?
在网站上,他们确实有config
https://github.com/zeit/pkg#config的部分,但我不知道如何使用它。目前,我有我的app.js和我的secrets.js,其中包含配置信息。
答案 0 :(得分:0)
我不确定这是正确的方法,但是我希望这对某人有帮助。
请参阅pkg文档,在运行时,__dirname变为“ / snapshot / project”。
因此,通过检查__dirname,可以确定您所处的环境。
(节点app.js或app.exe)。
然后我们可以将如下所示的要求句子分开。
const PKG_TOP_DIR = 'snapshot';
const runInPKG = (function(){
const pathParsed = path.parse(__dirname);
const root = pathParsed.root;
const dir = pathParsed.dir;
const firstDepth = path.relative(root, dir).split(path.sep)[0];
return (firstDepth === PKG_TOP_DIR)
})();
let config = require('./appconfig.json');
if(runInPKG) {
const deployPath = path.dirname(process.execPath);
config = require(path.join(deployPath, 'appconfig.json'));
}
pkg。 --targets node8-win-x64 --out-path ./dist
pkg@4.4.0 警告无法解析'path.join(deployPath,'appconfig.json')'
app.js
动态需求可能在运行时失败,因为请求的文件
在编译时未知,不包含在可执行文件中。
使用字符串文字作为'require'的参数,或保留它
按原样,然后在“脚本”选项中指定解析的文件名。
答案 1 :(得分:0)
https://github.com/vercel/pkg/issues/195
使用 fs 读取配置文件,而不是 require 或 import
例如:
const configPath = path.join(process.cwd(), './config/config.json');
lset data = fs.readFileSync(configPath);
相同的问题链接:excluding config file while converting node js files to exe using pkg