Skip to content

Support for import('./native.node') #55821

Description

@guybedford

What is the problem this feature will solve?

Currently require needs to be used in ES modules in order to be able to load native addons:

import { feature } from './native.node';

Previous issue: #40541.

There is some discussion to be had around whether import assertions should be used for the type. Personally I would even prefer if the import assertion wasn't necessarily mandated like we do for Wasm imports.

What is the feature you are proposing to solve the problem?

Transparently add support for import('./native.node') to work in the Node.js ESM implementation, based on the .node file extension.

This is one of the few last features that require() supports but import() does not, and would help gain full parity between the module systems.

What alternatives have you considered?

The alternative is to rely on process or have a more ergonomic process.getNativeModule('./mode.node'), but I think users would prefer the ergonomics of a direct import.

Some thought may need to be put to default versus named exports support in this interface as well.

Activity

  1. aduh95 commented on Nov 11, 2024

    @aduh95
    Contributor

    The alternative is to rely on process or have a more ergonomic process.getNativeModule('./mode.node'), but I think users would prefer the ergonomics of a direct import.

    That would either load ./mode.node as a path relative to the CWD (a bit confusing coming from require()), or would require passing a base URL (i.e. process.getNativeModule('./mode.node', import.meta.url))

  2. added
    addonsIssues and PRs related to native addons.
    esmIssues and PRs related to the ECMAScript Modules implementation.
    on Nov 14, 2024
  3. GeoffreyBooth commented on Nov 14, 2024

    @GeoffreyBooth
    Member

    cc @nodejs/loaders

    +1 for this. In my mind the only question is whether or not to require the type attribute; see #40541 (comment) and #40766. Are there any spec concerns with leaving it off? If we eventually support non-experimental import of Wasm, will the attribute be required there? If so, it might seem odd that the attribute isn’t needed for .node while it is needed for .wasm and .json (and other non-JavaScript types like .css in browsers).

  4. guybedford commented on Nov 14, 2024

    @guybedford
    ContributorAuthor

    Wasm was landed in HTML recently without requiring the "type" attribute. So it's only needed for the "lesser capability" module formats of CSS and JSON.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    addonsIssues and PRs related to native addons.esmIssues and PRs related to the ECMAScript Modules implementation.feature requestIssues requesting new Node.js features.

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions