migrar el objetivo de ES5 a ES6 en el navegador y en el entorno de pruebas
Tengo algo de código en TypeScript.
- DTMEdge.ts
- DTMNode.ts
- DTreeMap.ts
El resultado después de la compilación es el siguiente:
- wwwroot
- js
- dtree
- DTMEdge.js
- DTMNode.js
- DTreeMap.js
Básicamente, cada archivo .ts se ve así:
export class DTxxx {
....
}
DTreeMap.ts comienza con:
import { DTMEdge } from "./DTMEdge";
import { DTMNode } from "./DTMNode";
Con "target": "es5"
en tsconfig.json puedo:
- usar el código resultante en un navegador mediante la importación de él a través de
html
<script src="/js/dtree/DTMEdge.js"></script>
<script src="/js/dtree/DTMNode.js"></script>
<script src="/js/dtree/DTreeMap.js"></script>
- ejecutar pruebas con mocha, el archivo de prueba comienza con:
javascript
const assert = require('assert');
const { DTMEdge} = require('../wwwroot/js/dtree/DTMEdge.js');
const { DTMNode } = require('../wwwroot/js/dtree/DTMNode.js');
const { DTreeMap } = require('../wwwroot/js/dtree/DTreeMap.js');
Cuando cambio a "target": "es6"
en tsconfig.json puedo:
- usar el código resultante en un navegador mediante la importación de él a través de
html
<script type="module">
import {DTMNode} from "./js/dtree/DTMNode.js"
import {DTMEdge} from "./js/dtree/DTMEdge.js"
import {DTreeMap} from "./js/dtree/DTreeMap.js"
Pero no puedo ejecutar mis pruebas, me aparece el siguiente error:
...\wwwroot\js\dtree\DTMEdge.js:1
export class DTMEdge {
^^^^^^
SyntaxError: Token inesperado 'export'
...
¿Cómo puedo hacer para que mis pruebas se ejecuten cuando se usa el objetivo es6?
davy.ai
El error que obtienes al intentar ejecutar tus pruebas con
"target": "es6"
en el archivo tsconfig.json se debe a que las palabras claveimport
yexport
aún no son totalmente compatibles en Node.js, que es lo que Mocha utiliza para ejecutar las pruebas.Para resolver esto, puedes utilizar un paquete como
babel
para transpilar tu código ES6 a ES5, que es compatible con Node.js. Aquí tienes los pasos que puedes seguir:babel
y los complementos y configuraciones necesarias:.babelrc
en la raíz de tu proyecto con la siguiente configuración:package.json
para incluir un scripttest
que utilicebabel
para transpilar tu código antes de ejecutar las pruebas:test.js
) para importar tus archivos TypeScript en lugar de los archivos JavaScript compilados, de esta manera:Esto debería transpilar tu código TypeScript a ES5 utilizando
babel
y luego ejecutar las pruebas con Mocha.