Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

Refactor `requireNodeAddon` to take the package name and extension-less path of an addon

Aberta
#222 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
5/5
Tempo estimado
Mais de uma semana
Facilidade para iniciantes
25/100
Tipo de issue
Refatoração
Clareza
Razoavelmente clara
Status de atividade
Estagnada
Stack de tecnologia
node.js, react-native, typescript

Direção de pesquisa

Comece localizando o ponto de entrada requireNodeAddon e as declarações públicas representadas por index.js e index.d.ts no exemplo. Compare a API de caminho sem extensão e packageName solicitada com as implementações das plataformas, incluindo o caminho Node.js process.dlopen e a condição de exportação node; está concluído quando os mesmos argumentos de chamada funcionarem nas plataformas indicadas.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

Host 🏡

This is a suggestion which is subtly different from the one proposed in https://github.com/callstackincubator/react-native-node-api/issues/91.

Goals

  • Removing the requirement for the Babel plugin, for use-cases where a library author "controls" the code calling into the host package.
  • Give more control to the host package when deciding what library files to loads (at runtime).
  • Supporting multiple platforms (including Node.js) with source-code calling into the host package with the same call arguments

Example library

Imagine a library ("my-lib") with a single index.js entrypoint calling into our host package:

// node_modules/my-lib/index.js
import { requireNodeAddon } from "react-native-node-api";
const addon = requireNodeAddon({
  packageName: "my-lib", // The name from the package.json
  path: "build/Release/hello" // Path to the addon, relative to the package root, stripped from its ".*.node" file extensions.
});
export const sum = addon.sum;

and the following directory structure:

index.js
index.d.ts
build/Release
├── hello.android.node
│   ├── arm64-v8a
│   │   └── libhello.so
│   ├── armeabi-v7a
│   │   └── libhello.so
│   ├── react-native-node-api-module
│   ├── x86
│   │   └── libhello.so
│   └── x86_64
│       └── libhello.so
├── hello.apple.node
│   ├── Info.plist
│   ├── ios-arm64
│   │   └── hello.framework
│   │       ├── Headers
│   │       ├── hello
│   │       └── Info.plist
│   ├── ios-arm64-simulator
│   │   └── hello.framework
│   │       ├── Headers
│   │       ├── hello
│   │       └── Info.plist
│   ├── macos-arm64_x86_64
│   │   └── hello.framework
│   │       ├── Headers
│   │       ├── hello
│   │       └── Info.plist
│   ├── react-native-node-api-module
│   ├── tvos-arm64
│   │   └── hello.framework
│   │       ├── Headers
│   │       ├── hello
│   │       └── Info.plist
│   ├── tvos-arm64-simulator
│   │   └── hello.framework
│   │       ├── Headers
│   │       ├── hello
│   │       └── Info.plist
│   ├── xros-arm64
│   │   └── hello.framework
│   │       ├── Headers
│   │       ├── hello
│   │       └── Info.plist
│   └── xros-arm64-simulator
│       └── hello.framework
│           ├── Headers
│           ├── hello
│           └── Info.plist
└── hello.nodejs.node
    ├── darwin-arm64
    │   └── hello.node
    └── react-native-node-api-module
Linguagem predominante
TypeScript
Estrelas
188
Forks
10
Merge médio
2d 17h
PRs com merge (30d)
3

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de callstackincubator/react-native-node-api

Todas as issues de callstackincubator/react-native-node-api

Issues semelhantes

Mais issues de TypeScript

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.