¿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?
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:Luego, modifica la sección de scripts de tu
package.json
para usarts-node-dev
en lugar denode
. Por ejemplo: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.