Skip to content

dynamically imported module #55

@nephix

Description

@nephix

Hey,

is it possible to use habitat() for dynamically imported ES modules like:

import habitat from "preact-habitat";
...
const module = await import("/js/module.js"); // module.js is a compiled preact component
const { render } = habitat(module);

my use case is that:

  • I want to init multiple widgets on a site
  • A server response decides which widgets to init
  • I only want to request/load the widgets that are supposed to be mounted

I tried:

const modules: Record<Modules, string> = {
  widget1: "/js/modules/1.js",
  widget2: "/js/modules/2.js",
  widget3: "/js/modules/3.js",
};

const module = await import(modules[feature]); // feature is "widget1" | "widget2" | "widget3"
const { render } = habitat(module.default); // each widget is a bundled preact functional component with default export
render({ selector: "..." })

But I keep getting errors a la:

TypeError: Cannot read properties of undefined (reading '__H')

When I import the module directly, it works ofc

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions