es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo utilizo mi módulo de TypeScript con node, sin compilarlo?

Tengo un módulo de TypeScript que estoy intentando reutilizar dentro de algunos otros proyectos/módulos.

package.json:

{
  "name": "shared-module",
  "version": "1.0.0",
  "private": true,
  "description": "",
  "main": "src/index.ts",
  "scripts": {
    "compile": "tsc",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "typescript": "^4.5.2"
  },
  "dependencies": {
    "@types/node": "^16.11.11"
  }
}

Ahora, cuando enlazo(importo) este módulo en un proyecto de Svelte-Kit, puedo usar las exportaciones del módulo sin siquiera compilarlo. La recarga en caliente funciona y al cambiar los archivos fuente del módulo, la aplicación Svelte recoge los cambios.

Ahora quiero configurar algo similar con un proyecto de nodo vacío, donde importo este módulo y no tengo que volver a compilarlo cada vez que quiero que el módulo principal recoja los cambios.
Sin embargo, obtengo el siguiente error:

TypeError [ERR_INVALID_MODULE_SPECIFIER]: Invalid module "file:///E:/module-dir/src/index.ts"

cuando intento ejecutar el módulo principal con:

tsc && node --experimental-modules --es-module-specifier-resolution=node dist/index.js"

¿Cómo puedo obtener un comportamiento similar al de Svelte-Kit? Es decir, ¿se importa el módulo de TypeScript y todo se compila con el proyecto principal?

¿Es posible hacerlo de forma nativa con node, o funciona con Svelte Kit debido a la magia interna de empaquetamiento de vite?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr un comportamiento similar a Svelte-Kit, donde se puede importar un módulo de TypeScript y se pueden capturar los cambios sin tener que recompilarlo cada vez en un proyecto de Node, puedes utilizar una herramienta como ts-node-dev, que proporciona la recarga en caliente para aplicaciones de Node.js.

    Primero, instala ts-node-dev como una dependencia de desarrollo:

    npm install --save-dev ts-node-dev
    

    Luego, modifica la sección de scripts de tu package.json para usar ts-node-dev en lugar de node. Por ejemplo:

    "scripts": {
      "start": "ts-node-dev --respawn src/index.ts"
    },
    

    Ahora, cuando ejecutes npm start, ts-node-dev compilará tu módulo de TypeScript y estará atento a los cambios, y volverá a compilar y reiniciar el módulo padre cada vez que se detecten cambios.

    Ten en cuenta que este comportamiento no viene de serie con Node.js, y requiere el uso de una herramienta como ts-node-dev para lograrlo. Es probable que el comportamiento en Svelte-Kit se deba a la magia interna de empaquetado de Vite.

Comments are closed.