Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Generated entry JS file for AOT thinks I'm not using AOT

Ouverte
#430 1 commentaire 2 réactions 1 personne assignée Voir sur GitHub

@jasongin y travaille déjà.

Depuis le 14/3/2025.

Évaluation

Cette issue n'a pas encore été évaluée.

Description

I'm building an AOT module with the following .csproj file:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <PublishAot>true</PublishAot>
    <PublishNodeModule>true</PublishNodeModule>
    <PublishDir>bin</PublishDir>
    <PackNpmPackage>true</PackNpmPackage>
    <PackageOutputPath>pkg</PackageOutputPath>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.JavaScript.NodeApi" Version="0.9.5" />
    <PackageReference Include="Microsoft.JavaScript.NodeApi.Generator" Version="0.9.5" />
  </ItemGroup>

</Project>

After dotnet publish, I get a valid AOT .dll file with the following .js entry file generated:

// Generated for: NativeModule 1.0.0.0
// Generated by: Microsoft.JavaScript.NodeApi.Generator 0.9.0.0
/* eslint-disable */

const dotnet = require('node-api-dotnet/net8.0');
const path = require('node:path');
// @ts-ignore - https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/65252
const { dlopen, platform, arch } = require('node:process');

const moduleName = path.basename(__filename, __filename.match(/(\.[cm]?js)?$/)[0]);
module.exports = dotnet ? importDotnetModule(moduleName) : importAotModule(moduleName);

function importDotnetModule(moduleName) {
	[...]
}

function importAotModule(moduleName) {
	[...]
}

Note the module.exports = dotnet ? importDotnetModule(moduleName) : importAotModule(moduleName); line which is the culprit here - because I'm using AOT, it's supposed to call importAotModule rather than importDotnetModule. However, I'm not sure how this is supposed to work:

  • If I have node-api-dotnet in my dependencies, require('node-api-dotnet/net8.0') works, i.e. it returns a truthy value, so importDotnetModule gets called (which fails)
  • If I don't have node-api-dotnet in my dependencies (as in the example), the require throws and I can't import the module

I feel I'm missing something here, how am I supposed to "tell" the generator or runtime I'm using AOT?

Langage dominant
C#
Étoiles
785
Forks
80
Métriques de merge des PR
Aucune PR mergée en 30 j

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de microsoft/node-api-dotnet

Toutes les issues de microsoft/node-api-dotnet

Issues similaires

Plus d'issues C#

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.