首页 > 解决方案 > 如何为节点 pkg 创建配置文件

问题描述

我使用节点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。

标签: node.jspackage.jsonpkg-file

解决方案


我不确定这是正确的方法,但我希望这对某人有所帮助。
参考 pkg 文档,在运行时,__dirname 变为“/snapshot/project”。

因此,通过检查 __dirname,您可以确定您所在的环境。
(节点 app.js 或 app.exe)。

然后我们可以像下面这样分离require语句。

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'));
}
  • 将上述代码添加到您的 app.js 会在 pkg 构建时发出一些警告。

包。--targets node8-win-x64 --out-path ./dist

pkg@4.4.0 警告 无法解析 'path.join(deployPath, 'appconfig.json')'
app.js
动态 require 可能在运行时失败,因为请求的文件
在编译时未知并且未包含在可执行文件中。
使用字符串文字作为 'require' 的参数,或保持
原样并在 'scripts' 选项中指定解析的文件名。


推荐阅读