Protractor: El paquete de lanzamiento de NPM debería reemplazar `globals.ts` por` globals.d.ts`

Creado en 18 ago. 2016  ·  3Comentarios  ·  Fuente: angular/protractor

Informe de error

  • Versión de nodo: 6.3.1
  • Versión de transportador: 4.0.3
  • Versión mecanografiada: 2.0.0

    Visión general

Esto es específico para proyectos mecanografiados con archivos fuente que importan protractor/globals . Específicamente, al importar protractor/globals , debido a que la versión NPM incluye el archivo globals.ts lugar de un archivo de definición correspondiente ( globals.d.ts ), el compilador de mecanografiado calculará la raíz de origen común del proyecto de mecanografiado consumidor. a la ruta común entre el transportador global.ts dependencia (probablemente node_modules/protractor ) y dondequiera que estén contenidas las fuentes del proyecto consumidor (por ejemplo, src/test/**/*.ts ). Esto lleva al compilador a generar los archivos fuente con todos los directorios principales incluidos.

Tenga en cuenta que esto es puramente un problema en el que el compilador de mecanografiado genera los archivos compilados; la compilación ocurre bien y el transportador se consume (tan asombrosamente) como se esperaba.

Pasos para reproducir

Para demostrar mejor el escenario que describo mal, consulte este proyecto de ejemplo .

Solución propuesta

Sospecho que resolver esto aquí sería una combinación de dos cosas:

  1. actualizar el proceso de compilación actual de gulp para garantizar que se cree un archivo de definición cuando se compile el archivo globals.ts ; y
  2. Actualice el proceso de publicación de Protractor NPM (ya sea manual o automático) para eliminar el archivo globals.ts del paquete de publicación de NPM, dejando solo el archivo javascript compilado y el archivo de definición correspondiente.

Si esto es correcto, me complacerá enviar una solicitud de extracción para manejar la primera parte de la solución. Si el proceso de lanzamiento a NPM sigue el documento de lanzamiento del proyecto, también me complacerá actualizarlo con un paso para eliminar el archivo globals.ts , aunque eso podría ser mejor manipulado por alguien que realmente realiza lanzamientos.

Si bien lo he pensado detenidamente y creo que el compilador de Typescript se está comportando como se esperaba, avíseme si no está de acuerdo, ya que todavía me estoy mojando los pies con Typescript.

(editar: formato de actualización para reflejar la plantilla de error)

Comentario más útil

@cnishina ¡Me alegro de que el ejemplo haya ayudado! Gracias por la respuesta rápida, esto se ve muy bien, excepto por una cosa que podría confundirme: si bien su cambio elimina el archivo global.ts del paquete NPM, no tendrá una declaración globals.d.ts hacer que la importación protractor/globals invisible para el compilador de mecanografiado para los proyectos de consumo?

Así que supongo que la primera parte de mi propuesta no fue eliminar la globals.js compilada a favor de la declaración globals.d.ts , sino tener ambas para que el paquete NPM contenga:

  • globals.js
  • globals.d.ts

solo sin el archivo fuente globals.ts .

Creo que esto se puede lograr usando tsc con la bandera --declaration al compilar el archivo global.ts . Por ejemplo, cambiar la tarea tsc: globals gulp como se muestra a continuación debería funcionar, aunque noté que también hay tareas tsc y tsc:w en el package.json que podrían necesitar ser actualizadas también siempre que eso no modifique las compilaciones no globales de manera adversa:

gulp.task('tsc:globals', function(done) {
  runSpawn(done, 'node', ['node_modules/typescript/bin/tsc', '--declaration', 'globals.ts'],
    'ignore');
});

Avísame si me falta algo y gracias de nuevo por la solución rápida. Por cierto, ¡usar Transportador con TypeScript es una maravilla!

Todos 3 comentarios

@tmeneau Gracias por este problema: me gustó mucho el ejemplo de github ... 👍 👍 👍

Así que este es un efecto secundario al usar outDir. Por ejemplo, si outDir se establece en output , además de los archivos transpilados, output/node_modules/protractor/globals.js también se transpile. Originalmente incluí el archivo globals.ts ya que (en ese momento) después de un poco de experimentación, no se podía importar un tipo de archivo sin tener el archivo TypeScript.

Para revisar las propuestas:

  1. No funciona ya que globals.ts no puede ser simplemente un archivo de declaración * d.ts ya que estamos asignando variables desde el espacio de nombres global.
  2. Después de experimentar con exampleTypescript esto parece funcionar. Estoy actualizando el .npmignore para no publicar ese archivo y actualizar Transportador a TypeScript 2. Ver: https://github.com/angular/protractor/pull/3485

@cnishina ¡Me alegro de que el ejemplo haya ayudado! Gracias por la respuesta rápida, esto se ve muy bien, excepto por una cosa que podría confundirme: si bien su cambio elimina el archivo global.ts del paquete NPM, no tendrá una declaración globals.d.ts hacer que la importación protractor/globals invisible para el compilador de mecanografiado para los proyectos de consumo?

Así que supongo que la primera parte de mi propuesta no fue eliminar la globals.js compilada a favor de la declaración globals.d.ts , sino tener ambas para que el paquete NPM contenga:

  • globals.js
  • globals.d.ts

solo sin el archivo fuente globals.ts .

Creo que esto se puede lograr usando tsc con la bandera --declaration al compilar el archivo global.ts . Por ejemplo, cambiar la tarea tsc: globals gulp como se muestra a continuación debería funcionar, aunque noté que también hay tareas tsc y tsc:w en el package.json que podrían necesitar ser actualizadas también siempre que eso no modifique las compilaciones no globales de manera adversa:

gulp.task('tsc:globals', function(done) {
  runSpawn(done, 'node', ['node_modules/typescript/bin/tsc', '--declaration', 'globals.ts'],
    'ignore');
});

Avísame si me falta algo y gracias de nuevo por la solución rápida. Por cierto, ¡usar Transportador con TypeScript es una maravilla!

Sí ... 👍 globals.d.ts todavía debería estar allí para que funcione la importación de protractor/globals . Actualicé el PR. ¡Gracias!

¿Fue útil esta página
0 / 5 - 0 calificaciones