¿Hay compatibilidad con el mapa fuente para mecanografiado en node/nodemon?

4 minutos de lectura

avatar de usuario de k0pernikus
k0pernikus

Tengo un proyecto de nodo escrito en mecanografiado@2.

Mi tsconfig tiene sourceMap ajustado a true y el *.map.js se generan los archivos. Cuando ejecuto mi transpilado *.js archivos JavaScript a través de node o nodemonsolo veo los mensajes de error relativos a la js archivo y no a los archivos mecanografiados asignados; Supongo que es completamente ignorado.

Es sourceMap ¿Soporte solo destinado a soporte de navegador? ¿O puedo usarlo junto con node o nodemon? Si es lo último, ¿cómo lo habilitaría?

Quiero ver errores de tiempo de ejecución detectados desde un archivo javascript ejecutado en relación con el archivo mecanografiado original.

Avatar de usuario de Stephen Paul
Esteban Pablo

🚩 para versiones de Node desde v12.12, hay una solución mejor y más fácil.

Recientemente conseguí que esto funcionara en mi aplicación express. Pasos de la siguiente manera:

Instale la biblioteca requerida:

npm install --save-dev source-map-support

En su punto de entrada (por ejemplo, app.ts):

require('source-map-support').install();

En tus app.tstambién puede necesitar un mejor registro de errores dentro de las promesas:

process.on('unhandledRejection', console.log);

En tus tsconfigbajo compilerOptions:

"inlineSourceMap": true

  • Las opciones del compilador inlineSourceMap y sourceMap son mutuamente excluyentes

    – david.barkhuizen

    16 de enero de 2019 a las 14:41

  • Si agrega el uso de cli a su respuesta (como señalé en la mía), aceptaré el suyo y eliminaré el mío. (stackoverflow.com/a/58455205/457268)

    – k0pernikus

    18 oct 2019 a las 17:01

  • @k0pernikus gracias. Disculpas, no estoy 100% seguro de entender. Siéntase libre de editar mi respuesta para mostrar lo que quiere decir.

    – Esteban Pablo

    18 oct 2019 a las 17:29

  • Cualquier forma de hacer esto de forma nativa sin inflar un paquete con source-map-support?

    – Tiago

    21 de enero de 2021 a las 8:53

  • Desde el nodo v12, puede usar la bandera --enable-source-maps

    – Ricardo

    21 de enero de 2022 a las 15:46

Las respuestas aquí son correctas para las versiones anteriores de Node v12.12.0que añadió el (experimental) --enable-source-maps bandera. Con eso habilitado, los mapas de origen se aplican a los seguimientos de pila sin una dependencia adicional. Como se demuestra en Este artículo, tiene el comportamiento ligeramente diferente y posiblemente beneficioso de incluir tanto la ubicación del archivo .js generado como la ubicación del archivo de origen. Por ejemplo:

Error: not found
    at Object.<anonymous> (/Users/bencoe/oss/source-map-testing/test.js:29:7)
        -> /Users/bencoe/oss/source-map-testing/test.ts:13:7

  • NODE_OPTIONS=--enable-source-maps npm test es el comando que estaba buscando

    – Boris Verjovskiy

    9 de marzo de 2022 a las 5:46


  • Descubrí que esto no funcionaba a menos que pusiera --enable-source-maps ANTES de la ruta al archivo de script. Quizás esto sea normal para los conmutadores de línea de comandos de Node; No estoy seguro.

    – Clonkex

    12 de abril de 2022 a las 4:49

  • Nota: Hay denuncias de --enable-source-maps ralentización de las solicitudes (Ver github.com/nodejs/node/issues/41541). Tal vez se requiera un poco de pulido antes de que podamos usar esto en producción.

    – vamsiampolu

    14 de junio de 2022 a las 4:38

avatar de usuario de k0pernikus
k0pernikus

Instale el soporte del mapa fuente:

npm install source-map-support

(También corro en producción, ya que ayuda inmensamente a encontrar errores en los registros de cuando ocurre un error. No experimenté un gran impacto en el rendimiento, pero su experiencia puede ser diferente).

añadir a su tsconfig.json:

{
   "compilerOptions": {
      "sourceMap": true
   }
}

Al ejecutar su archivo JavaScript, agregue el parámetro requerido:

nodemon -r source-map-support/register dist/pathToJson.js

node -r source-map-support/register dist/pathToJson.js

Alternativamente, agrega en su llamada de entrada:

require('source-map-support').install()

sin embargo, encuentro que esto es tedioso en proyectos con múltiples puntos de entrada.


Nota al margen: moca también apoya la --require / -r opción, por lo que para tener el soporte de sourcemap en mocha también puede llamar a sus pruebas con él, por ejemplo, similar a:

NODE_ENV=test npx mocha --forbid-only --require source-map-support/register --exit --recursive ./path/to/your/tests/

avatar de usuario de mvermand
mvermand

Encontré este módulo npm que parece funcionar:

https://github.com/evanw/node-source-map-soporte

correr npm install source-map-support --save en la raíz de su proyecto de nodo y agregue import 'source-map-support/register' a su archivo main.ts o index.ts.

Eso es todo.

Avatar de usuario de Bruno Grieder
bruno grieder

El soporte del mapa de origen funciona perfectamente bien con el nodo

Todo lo que necesitas hacer es agregar

"source-map-support": "0.4.11",

a dependencies o dev-dependencies en package.json mediante la ejecución

npm install --save source-map-support

Y en su archivo ts de punto de entrada, simplemente agregue en la parte superior

require('source-map-support').install()

(nota: esto es llamar a nodeJS require – no hay necesidad de archivos de definición de soporte de mapa fuente)

  • ¿Alguna desventaja de usar esto en producción? (lado del servidor)

    – Grave

    06/11/2017 a las 21:36

  • @Sev No hasta donde sabemos (lo usamos en producción)

    –Bruno Grieder

    7 de noviembre de 2017 a las 8:24

Avatar de usuario de Astra Bear
Oso Astra

Para versiones de Nodo desde v12.12.0 use el indicador –enable-source-maps cuando ejecute node.

Ejemplo: nodo –enable-source-maps main.js

No instale “source-map-support” para las versiones de Node desde v12.12.0

  • ¿Alguna desventaja de usar esto en producción? (lado del servidor)

    – Grave

    06/11/2017 a las 21:36

  • @Sev No hasta donde sabemos (lo usamos en producción)

    –Bruno Grieder

    7 de noviembre de 2017 a las 8:24

¿Ha sido útil esta solución?