Protractor: NPM 发布包应该用 `globals.d.ts` 替换 `globals.ts`

创建于 2016-08-18  ·  3评论  ·  资料来源: angular/protractor

错误报告

  • 节点版本: 6.3.1
  • 量角器版本: 4.0.3
  • 打字稿版本: 2.0.0

    概述

这特定于具有导入protractor/globals源文件的打字稿项目。 具体来说,当导入protractor/globals ,因为 NPM 版本包含globals.ts文件而不是相应的定义文件( globals.d.ts ),所以打字稿编译器将计算使用的打字稿项目的公共源根到量角器global.ts依赖项(可能是node_modules/protractor )和包含使用项目的源的任何地方(例如, src/test/**/*.ts )之间的公共路径。 这导致编译器输出包含所有父目录的源文件。

请注意,这纯粹是打字稿编译器输出编译文件的问题; 编译进行得很好,量角器按预期消耗(非常好)。

重现步骤

为了更好地演示我描述不佳的场景,请参阅此示例项目

建议的解决方案

我怀疑在这里解决这个问题是两件事的结合:

  1. 更新当前的 gulp 编译过程以确保在编译globals.ts文件时创建定义文件; 和
  2. 更新 Protractor NPM 发布流程(无论是手动还是自动),从 NPM 发布包中删除globals.ts文件,只留下编译好的 javascript 文件和相应的定义文件。

如果这是合理的,我很乐意提交拉取请求来处理解决方案的第一部分。 如果 NPM 的发布过程仍然遵循项目的发布文档,我也很乐意通过删除globals.ts文件的步骤来更新它,尽管实际执行发布的人可能会更好地修改它。

虽然我已经考虑过这一点并相信 Typescript 编译器的行为符合预期,但如果您不同意,请告诉我,因为我仍然对 Typescript 感到不知所措。

(编辑:更新格式以反映错误模板)

最有用的评论

@cnishina很高兴这个例子有帮助! 感谢您的快速回复,这看起来很棒,除了我可能会感到困惑的一件事:虽然您的更改从 NPM 包中删除了global.ts文件,但不会有相应的globals.d.ts声明使protractor/globals导入对使用项目的打字稿编译器不可见?

所以我想我的建议的第一部分不是删除编译的globals.js以支持globals.d.ts声明,而是同时拥有两者,以便 NPM 包将包含:

  • globals.js
  • globals.d.ts

只是没有globals.ts源文件。

我相信这可以在编译global.ts文件时使用带有--declaration标志的 tsc来实现。 例如,像下面这样更改tsc:globals gulp 任务应该可以解决问题,尽管我注意到 package.json 中还有tsctsc:w任务可能也需要更新前提是不会不利地修改非全局编译:

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

如果我遗漏了什么,请告诉我,再次感谢您的快速修复! 顺便说一句,将 Protractor 与 Typescript 一起使用是一件很严重的事情!

所有3条评论

@tmeneau谢谢这个问题:我真的很喜欢 github 的例子...👍👍👍

所以这是使用 outDir 时的副作用。 例如,如果outDir设置为output ,除了转译的文件, output/node_modules/protractor/globals.js也将被转译。 我最初包含 globals.ts 文件,因为(当时)经过一些实验,如果没有 TypeScript 文件,您将无法导入文件类型。

要通过提案:

  1. 不起作用,因为 globals.ts 不能只是声明文件 *d.ts 因为我们从全局命名空间分配变量。
  2. exampleTypescript进行试验后,这似乎有效。 我正在更新 .npmignore 以不发布该文件并将 Protractor 升级到 TypeScript 2。请参阅: https :

@cnishina很高兴这个例子有帮助! 感谢您的快速回复,这看起来很棒,除了我可能会感到困惑的一件事:虽然您的更改从 NPM 包中删除了global.ts文件,但不会有相应的globals.d.ts声明使protractor/globals导入对使用项目的打字稿编译器不可见?

所以我想我的建议的第一部分不是删除编译的globals.js以支持globals.d.ts声明,而是同时拥有两者,以便 NPM 包将包含:

  • globals.js
  • globals.d.ts

只是没有globals.ts源文件。

我相信这可以在编译global.ts文件时使用带有--declaration标志的 tsc来实现。 例如,像下面这样更改tsc:globals gulp 任务应该可以解决问题,尽管我注意到 package.json 中还有tsctsc:w任务可能也需要更新前提是不会不利地修改非全局编译:

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

如果我遗漏了什么,请告诉我,再次感谢您的快速修复! 顺便说一句,将 Protractor 与 Typescript 一起使用是一件很严重的事情!

是的... 👍 globals.d.ts应该仍然存在以使protractor/globals导入工作。 我更新了 PR。 谢谢!

此页面是否有帮助?
0 / 5 - 0 等级