AppImageAutoUpgradeFailureBecauseofAPPIMAGENOFound
Error: Error: APPIMAGE env is not defined at t.newError (/tmp/.mount_no-app2Kmp8v/resources/app.asar/dist/main.js:1:12502)
at Object.task (/tmp/.mount_no-app2Kmp8v/resources/app.asar/dist/main.js:142:178326)
at h.executeDownload (/tmp/.mount_no-app2Kmp8v/resources/app.asar/dist/main.js:1:254868)
at async /tmp/.mount_no-app2Kmp8v/resources/app.asar/dist/main.js:315:180714
at async EventEmitter.Hr (/tmp/.mount_no-app2Kmp8v/resources/app.asar/dist/main.js:315:180675)
09:30:53.222 › Cannot dispatch error event: TypeError: Error processing argument at index 1, conversion failure from Error: APPIMAGE env is not defined
at Object.showErrorBox (/tmp/.mount_no-app2Kmp8v/resources/electron.asar/browser/api/dialog.js:163:24)
at h.<anonymous> (/tmp/.mount_no-app2Kmp8v/resources/app.asar/dist/main.js:315:179401)
You will more detail inforamtion from output if you start with a debug flag like below
chmod +x app.AppImageDEBUG=true ./app.AppImage
You will find the APPIMAGE
environment parameter is existing. Yes, it is here, but you program can not find it.
2. Code checking & Research
2.1 from research
- APPIMAGE env is not defined
- Best way to pass variables through Webpack?
According some github issue, we know some pulugin for example: DefinePlugin
will reset the environment parameters. Maybe this is the reason.
2.2 from code
...const stringified = {
"process.env": Object.keys(raw).reduce(
(env, key) => {
env[key] = JSON.stringify(raw[key]);
return env;
}, {}
),
};
new webpack.DefinePlugin(stringified)
...
From the code, we find the we use the DefinePlugin
to pass some environment parameter for building. And the important thing is that the whole process.env
is rewrited.
3. How to fix?
We have find the reason and there two way to fix the bug:
- append
APPIMAGE
to the existing code - only rewrite some process.env parameters, look like below:
const envParames = {}; Object.keys(raw).forEach(k => {
envParames[`process.env.${k}`] = JSON.stringify(raw[k])
});
new webpack.DefinePlugin(envParames)
Because the APPIMAGE
is a runtime environment, we can not set the value in building time. So the second it is right way to fix. Build a new application with new code, we test the app.AppImage
auto upgrade function, it works now.
4. What have learned?
4.1 there are two kind of environment parameter
- build time
- runtime
4.2 never to rewrite whole process.env, only set the what you need
4.3 Summary
if your code running some website, you maybe never to care about runtime environment parameter. But if you code will build to some package application eg: command line tools / desktop application, you should care about the runtime environment.
5. Other useful article
- Type 2 AppImage runtime: the APPIMAGE is a absolute path with symlinks resolved
以上是 AppImageAutoUpgradeFailureBecauseofAPPIMAGENOFound 的全部内容, 来源链接: utcz.com/z/515269.html