Protractor: O pacote de lançamento do NPM deve substituir `globals.ts` por` globals.d.ts`

Criado em 18 ago. 2016  ·  3Comentários  ·  Fonte: angular/protractor

Relatório de erro

  • Versão do nó: 6.3.1
  • Versão do transferidor: 4.0.3
  • Versão do texto datilografado: 2.0.0

    Visão geral

Isso é específico para projetos de texto datilografado com arquivos de origem importando protractor/globals . Especificamente, ao importar protractor/globals , porque o lançamento do NPM inclui o arquivo globals.ts vez de um arquivo de definição correspondente ( globals.d.ts ), o compilador de texto digitado computará a raiz de fonte comum do projeto de texto digitado que está consumindo para o caminho comum entre a dependência do Transferidor global.ts (provavelmente node_modules/protractor ) e onde quer que as fontes do projeto de consumo estejam contidas (por exemplo, src/test/**/*.ts ). Isso faz com que o compilador produza os arquivos de origem com todos os diretórios pais incluídos.

Observe que este é puramente um problema de onde o compilador de texto digitado produz os arquivos compilados; a compilação ocorre bem e o transferidor é consumido (de forma impressionante) conforme o esperado.

Passos para reproduzir

Para demonstrar melhor o cenário que estou descrevendo mal, consulte este projeto de exemplo .

Solução proposta

Suspeito que resolver isso aqui seria uma combinação de duas coisas:

  1. atualize o processo de compilação gulp atual para garantir que um arquivo de definição seja criado quando o arquivo globals.ts for compilado; e
  2. atualize o processo de lançamento do Protractor NPM (seja manual ou automatizado) para remover o arquivo globals.ts do pacote de lançamento do NPM, deixando apenas o arquivo javascript compilado e o arquivo de definição correspondente.

Se isso estiver certo, ficarei feliz em enviar uma solicitação pull para lidar com a primeira parte da solução. Se o processo de lançamento para o NPM ainda seguir o documento de lançamento do projeto, eu também ficaria feliz em atualizá-lo com uma etapa para remover o arquivo globals.ts , embora isso possa ser melhor manipulado por alguém que realmente realiza lançamentos.

Embora eu tenha refletido sobre isso e acredite que o compilador Typescript está se comportando conforme o esperado, deixe-me saber se você discorda, já que ainda estou começando a usar o Typescript.

(editar: atualizar o formato para refletir o modelo de bug)

Comentários muito úteis

@cnishina que bom que o exemplo ajudou! Obrigado pela resposta rápida, isso parece ótimo, exceto por uma coisa sobre a qual posso estar confuso: embora sua alteração remova o arquivo global.ts do pacote NPM, não terá uma declaração globals.d.ts tornar a importação protractor/globals invisível para o compilador de texto digitado para consumir projetos?

Portanto, acho que a primeira parte da minha proposta não era remover o globals.js compilado em favor da declaração globals.d.ts , mas ter ambos para que o pacote NPM contivesse:

  • globals.js
  • globals.d.ts

apenas sem o arquivo de origem globals.ts .

Eu acredito que isso pode ser alcançado usando tsc com o sinalizador --declaration ao compilar o arquivo global.ts . Por exemplo, alterar a tarefa tsc: globals gulp como abaixo deve resolver, embora eu tenha percebido que também há tsc e tsc:w tarefas no package.json que também podem precisar ser atualizadas desde que não modifique compilações não globais adversamente:

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

Avise-me se estiver faltando alguma coisa e obrigado novamente pela solução rápida! A propósito, usar Protractor com Typescript é uma explosão séria!

Todos 3 comentários

@tmeneau Obrigado por este problema: Eu realmente gostei do exemplo do github ... 👍 👍 👍

Portanto, este é um efeito colateral ao usar outDir. Por exemplo, se outDir for definido como output , além dos arquivos transpilados, output/node_modules/protractor/globals.js também serão transpilados. Originalmente, incluí o arquivo globals.ts, pois (na época), após alguns experimentos, não era possível importar um tipo de arquivo sem ter o arquivo TypeScript.

Para analisar as propostas:

  1. Não funciona, pois o globals.ts não pode ser apenas um arquivo de declaração * d.ts, pois estamos atribuindo variáveis ​​do namespace global.
  2. Depois de experimentar exampleTypescript isso parece funcionar. Estou atualizando o .npmignore para não publicar esse arquivo e atualizar o Protractor para TypeScript 2. Consulte: https://github.com/angular/protractor/pull/3485

@cnishina que bom que o exemplo ajudou! Obrigado pela resposta rápida, isso parece ótimo, exceto por uma coisa sobre a qual posso estar confuso: embora sua alteração remova o arquivo global.ts do pacote NPM, não terá uma declaração globals.d.ts tornar a importação protractor/globals invisível para o compilador de texto digitado para consumir projetos?

Portanto, acho que a primeira parte da minha proposta não era remover o globals.js compilado em favor da declaração globals.d.ts , mas ter ambos para que o pacote NPM contivesse:

  • globals.js
  • globals.d.ts

apenas sem o arquivo de origem globals.ts .

Eu acredito que isso pode ser alcançado usando tsc com o sinalizador --declaration ao compilar o arquivo global.ts . Por exemplo, alterar a tarefa tsc: globals gulp como abaixo deve resolver, embora eu tenha percebido que também há tsc e tsc:w tarefas no package.json que também podem precisar ser atualizadas desde que não modifique compilações não globais adversamente:

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

Avise-me se estiver faltando alguma coisa e obrigado novamente pela solução rápida! A propósito, usar Protractor com Typescript é uma explosão séria!

Sim ... 👍 globals.d.ts ainda deve estar lá para que protractor/globals import funcione. Eu atualizei o PR. Obrigado!

Esta página foi útil?
0 / 5 - 0 avaliações