Как создать файл конфигурации для узла pkg - PullRequest
0 голосов
/ 01 марта 2019

Я использую узел pkg, чтобы создать .exe моего сервиса nodejs: 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, который содержит информацию о конфигурации.

1 Ответ

0 голосов
/ 10 июля 2019

Я не уверен, что это правильный путь, но я надеюсь, что это кому-нибудь пригодится.
См. Документ 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'));
}
  • Добавление приведенного выше кода в ваш app.js предупреждает при сборке pkg.

шт.--targets node8-win-x64 --out-path ./dist

pkg@4.4.0 Предупреждение Не удается разрешить 'path.join (deployPath,' appconfig.json ')'
app.js
Динамическое требование может завершиться с ошибкой во время выполнения, потому что запрошенный файл
неизвестен во время компиляции и не включен в исполняемый файл.
Используйте строковый литерал в качестве аргумента для 'require' или оставьте его
как есть и укажите разрешенное имя файла в опции 'scripts'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...