ionic-team / ionic-cli

The Ionic command-line interface
MIT License
1.99k stars 640 forks source link

Use dynamic import in hooks for type module projects #5084

Open frederikbosch opened 1 month ago

frederikbosch commented 1 month ago

When using ionic + vue, the hooks serve:before scripts defined in ionic.config.json cannot run.

ionic.config.json

  "hooks": {
    "serve:before": ["./scripts/serve-before.js"]
  }

serve-before.js:

export default async function (ctx) {
}

This setup generates the following error:

[ERROR] An error occurred while running an Ionic CLI hook defined in ./ionic.config.json.

        Hook: serve:before
        File: /srv/libraries/app-ionic/scripts/install-custom.js

        Error [ERR_REQUIRE_ESM]: require() of ES Module /srv/libraries/app-ionic/scripts/serve-before.js from
        /srv/libraries/app-ionic/node_modules/@ionic/cli/lib/hooks.js not supported.
        Instead change the require of install-custom.js in
        /srv/libraries/app-ionic/node_modules/@ionic/cli/lib/hooks.js to a dynamic import() which is available in
        all CommonJS modules.
        at ServeBeforeHook.loadHookFn (/srv/libraries/app-ionic/node_modules/@ionic/cli/lib/hooks.js:73:24)

Switching back to require and module.exports style nodejs is not possible, because of the project type in the package.json.

"type": "module",