javascript - ts-node y cargadores personalizados
¿Es posible usar ts-node y un cargador personalizado? En la documentación solo veo una manera de habilitar la compatibilidad con esm.
ts-node --esm my-file.ts
Estoy intentando usar un cargador personalizado para probar un módulo ESM, pero no quiero usar Node para compilar cada vez, ya que esto es para un conjunto de pruebas. La forma de usar (varios) cargadores en Node es así
node --loader=esm --loader=testdouble my-file.js
Respuesta #1
Claro: Solo usa ts-node/esm como el valor del cargador. Usarlo en tu comando se ve así:
node --loader=ts-node/esm --loader=testdouble my-file.ts
Esto está documentado como una variable de entorno en el README de ts-node:
O, si necesita soporte nativo para ESM:
NODE_OPTIONS="--loader ts-node/esm"Esto indica a cualquier proceso de nodo que reciba esta variable de entorno que instale los hooks de ts-node antes de ejecutar otro código.
Asegúrate de entender:
- las advertencias de este cargador: GitHub — TypeStrong/ts-node#1007
- cómo funciona la API Loader en Node: Node.js — API > ESM > Cargadores
Edición: Aquí hay un ejemplo reproducible:
./package.json:
{
"name": "so-73217517",
"version": "0.1.0",
"type": "module",
"devDependencies": {
"testdouble": "^3.17.2",
"ts-node": "^10.9.1",
"typescript": "^5.0.4"
}
}
./tsconfig.json:
{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
}
}
./td_version.ts:
// The "version" export seems to be missing from testdouble's type definitions:
declare module "testdouble" {
export const version: string;
}
export { version } from "testdouble";
./example.ts:
import { version } from "./td_version.ts";
console.log("Testdouble version:", version);
En la terminal:
% node --version
v18.16.0
% node --loader=ts-node/esm --loader=testdouble example.ts
(node:60638) ExperimentalWarning: Custom ESM Loaders is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
(node:60638) Warning: Loader hook "getGlobalPreloadCode" has been renamed to "globalPreload"
(node:60638) DeprecationWarning: Obsolete loader hook(s) supplied and will be ignored: getFormat, getSource
Testdouble version: 3.17.2
