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