Protractor: Le package de version NPM doit remplacer `globals.ts` par `globals.d.ts`

Créé le 18 août 2016  ·  3Commentaires  ·  Source: angular/protractor

Rapport d'erreur

  • Version du nœud : 6.3.1
  • Version du rapporteur : 4.0.3
  • Version dactylographiée : 2.0.0

    Aperçu

Ceci est spécifique aux projets dactylographiés avec des fichiers source important protractor/globals . Plus précisément, lors de l'importation de protractor/globals , car la version NPM inclut le fichier globals.ts au lieu d'un fichier de définition correspondant ( globals.d.ts ), le compilateur dactylographié calculera la racine source commune du projet dactylographié. au chemin commun entre la dépendance de Protractor global.ts (probablement node_modules/protractor ) et l'endroit où se trouvent les sources du projet consommateur (par exemple, src/test/**/*.ts ). Cela amène le compilateur à sortir les fichiers source avec tous les répertoires parents inclus.

Notez qu'il s'agit purement d'un problème avec l'endroit où le compilateur dactylographié génère les fichiers compilés ; la compilation se passe bien et le rapporteur est consommé (aussi génialement) que prévu.

Étapes pour reproduire

Pour mieux illustrer le scénario que je décris mal, veuillez consulter cet exemple de projet .

Solution proposée

Je suppose que résoudre ce problème ici serait une combinaison de deux choses :

  1. mettre à jour le processus de compilation gulp actuel pour s'assurer qu'un fichier de définition est créé lorsque le fichier globals.ts est compilé ; et
  2. mettre à jour le processus de publication de Protractor NPM (manuel ou automatisé) pour supprimer le fichier globals.ts du package de publication NPM, en ne laissant que le fichier javascript compilé et le fichier de définition correspondant.

Si cela est valable, je serais heureux de soumettre une pull request pour gérer la première partie de la solution. Si le processus de publication vers NPM suit toujours le document de publication du projet, je serais également heureux de le mettre à jour avec une étape de suppression du fichier globals.ts , bien que cela puisse être mieux falsifié par quelqu'un qui effectue réellement les versions.

Bien que j'y ai réfléchi et que je pense que le compilateur Typescript se comporte comme prévu, faites-moi savoir si vous n'êtes pas d'accord car je suis toujours en train de me mouiller les pieds avec Typescript.

(modifier : mise à jour du format pour refléter le modèle de bogue)

Commentaire le plus utile

@cnishina content que l'exemple ait aidé ! Merci pour la réponse rapide, cela a l'air génial, sauf pour une chose qui pourrait me confondre : bien que votre modification supprime le fichier global.ts du package NPM, il n'y aura pas globals.d.ts déclaration correspondante protractor/globals invisible pour le compilateur dactylographié pour la consommation de projets ?

Je suppose donc que la première partie de ma proposition n'était pas de supprimer le globals.js compilé en faveur de la déclaration globals.d.ts , mais d'avoir les deux pour que le package NPM contienne :

  • globals.js
  • globals.d.ts

juste sans le fichier source globals.ts .

Je pense que cela peut être réalisé en utilisant tsc avec le drapeau --declaration lors de la compilation du fichier global.ts . Par exemple, changer la tâche tsc:globals gulp comme ci-dessous devrait faire l'affaire, bien que j'aie remarqué qu'il y a aussi des tâches tsc et tsc:w dans le package.json qui pourraient également avoir besoin d'être mises à jour à condition que cela ne modifie pas négativement les compilations non globales :

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

Faites-moi savoir si j'ai raté quelque chose, et merci encore pour la solution rapide ! Au fait, utiliser Protractor avec Typescript est vraiment génial !

Tous les 3 commentaires

@tmeneau Merci pour ce numéro : j'ai beaucoup aimé l'exemple github... 👍 👍 👍

C'est donc un effet secondaire lors de l'utilisation de outDir. Par exemple, si outDir est défini sur output , en plus des fichiers transpilés, output/node_modules/protractor/globals.js seront également transpilés. J'ai initialement inclus le fichier globals.ts car (à l'époque) après quelques expérimentations, vous ne pouviez pas importer un type de fichier sans avoir le fichier TypeScript.

Pour parcourir les propositions :

  1. Ne fonctionne pas car globals.ts ne peut pas être simplement un fichier de déclaration *d.ts puisque nous attribuons des variables à partir de l'espace de noms global.
  2. Après avoir expérimenté avec exampleTypescript cela semble fonctionner. Je mets à jour le .npmignore pour ne pas publier ce fichier et mettre à niveau Protractor vers TypeScript 2. Voir : https://github.com/angular/protractor/pull/3485

@cnishina content que l'exemple ait aidé ! Merci pour la réponse rapide, cela a l'air génial, sauf pour une chose qui pourrait me confondre : bien que votre modification supprime le fichier global.ts du package NPM, il n'y aura pas globals.d.ts déclaration correspondante protractor/globals invisible pour le compilateur dactylographié pour la consommation de projets ?

Je suppose donc que la première partie de ma proposition n'était pas de supprimer le globals.js compilé en faveur de la déclaration globals.d.ts , mais d'avoir les deux pour que le package NPM contienne :

  • globals.js
  • globals.d.ts

juste sans le fichier source globals.ts .

Je pense que cela peut être réalisé en utilisant tsc avec le drapeau --declaration lors de la compilation du fichier global.ts . Par exemple, changer la tâche tsc:globals gulp comme ci-dessous devrait faire l'affaire, bien que j'aie remarqué qu'il y a aussi des tâches tsc et tsc:w dans le package.json qui pourraient également avoir besoin d'être mises à jour à condition que cela ne modifie pas négativement les compilations non globales :

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

Faites-moi savoir si j'ai raté quelque chose, et merci encore pour la solution rapide ! Au fait, utiliser Protractor avec Typescript est vraiment génial !

Oui... 👍 globals.d.ts devrait toujours être là pour que l'importation de protractor/globals fonctionne. J'ai mis à jour le PR. Merci!

Cette page vous a été utile?
0 / 5 - 0 notes