-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
bug: capacitor.config.ts
cannot support top-level await
#6961
Comments
This issue needs more information before it can be addressed. In particular, the reporter needs to provide a minimal sample app that demonstrates the issue. If no sample app is provided within 15 days, the issue will be closed. |
Looks like this is a duplicate of #6836. However, that issue was closed. My temporary workaround was to write a script that imports my Capacitor TS config and writes |
This comment was marked as abuse.
This comment was marked as abuse.
This comment was marked as abuse.
This comment was marked as abuse.
@oliveryasuna If your not already aware, this feature is coming in capacitor 6: #4299 |
it's not, it allows to use async code, but not top level await |
@jcesarmobile Still, it will remove the need for top-level await. Thanks @bosh-code ! |
To fix typescript issues, it's compiler options here https://github.com/ionic-team/capacitor/blob/6.1.2/cli/src/util/node.ts#L27-L33 should be changed: {
"compilerOptions": {
- "module": "CommonJS",
+ "module": "Node16", // Or greater
- "moduleResolution": "Node",
+ "moduleResolution": "Node16", // Or greater
"esModuleInterop": true,
"strict": true,
"target": "ES2017"
}
} This resolves VSCode issue when I created
but I'm not sure it actually works. Another thing is that since Capacitor v6 requires Node >= 18 compiler options can be updated to this: https://github.com/tsconfig/bases/blob/main/bases/node18.json Update: above doesn't help in using top level await, probably because async function generateConfig(): Promise<CapacitorConfig> {
const { loadEnv } = await import('vite');
// ...
}; I have tried changing: compilerOptions: {
- module: ts.ModuleKind.CommonJS,
+ module: ts.ModuleKind.Node16,
- moduleResolution: ts.ModuleResolutionKind.NodeJs,
+ moduleResolution: ts.ModuleResolutionKind.Node16,
} |
Bug Report
Capacitor Version
Current Behavior
I was not sure if I should report this as a bug or feature. I consider it a bug, but a fix would most likely introduce a new feature.
See the Code Reproduction. It is impossible to use top-level
await
statements incapacitor.config.ts
. This is due to https://github.com/ionic-team/capacitor/blob/main/cli/src/util/node.ts#L12-L50. The module is always loaded as a CommonJS module, which does not support top-levelawait
statements.You may think that you could make the whole module asynchronous:
but Capacitor does not handle this.
Expected Behavior
Capacitor should not limit developers to write a CommonJS-compliant
capacitor.config.ts
. It is a mobile framework, not a JS one. Thus, in my opinion, it can be mobile-opinionated, but not JS opinionated.I propose two solutions:
capacitor.config.ts
. Perhaps use a predefined TSConfig file, such astsconfig.capacitor.json
. Better if the code allows developers to specify the file, though.Code Reproduction
https://github.com/oliveryasuna/capacitor-config-bug
Try running
cap add ios
, for example.Here's a config that would cause problems.
The text was updated successfully, but these errors were encountered: