如何为节点pkg

时间:2019-03-01 12:41:53

标签: node.js package.json pkg-file

我使用节点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,其中包含配置信息。

2 个答案:

答案 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时,将上述代码添加到app.js会发出一些警告。
  

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