我不确定这是正确的方法,但我希望这对某人有所帮助。
参考 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' 选项中指定解析的文件名。