带有套接字io构建问题的打字稿,解决了未使用的require语句

时间:2019-04-21 12:47:10

标签: javascript node.js npm

我刚刚开始学习打字稿,并且在将我的Node js服务器代码迁移到打字稿中时,遇到了几个问题(或问题)。

  1. 我不知道为什么,但是当我看打字稿教程时,大多数辅导员都使用yarn而不是npm。这是为什么?我刚刚了解到,知道纱线的速度要快一些,并且还有其他一些好处,但是打字稿应用程序与纱线而不是npm配合得很好吗?

  2. 在编写打字稿应用程序时,导师会安装带有@ types /前缀的依赖项以及没有前缀的依赖项。我猜带有@types的那个是用typescript编写的相同模块。那为什么要同时安装两者呢?打字稿还不够吗?

  3. 因为JavaScript与Typescript兼容,所以只使用non @types模块可以吗?

  4. 我使用包裹构建打字稿应用程序。并且在名为engine.io的模块中(可能是因为我将socket.io作为依赖项而安装),发生了构建错误,指出它无法解决依赖项“ uws”。

 D:\NodeApps-valC\ToolboxWars - Parcel\node_modules\engine.io\lib\server.js:107:35: Cannot resolve dependency 'uws'
  105 |   var wsModule;
  106 |   switch (this.wsEngine) {
> 107 |     case 'uws': wsModule = require('uws'); break;
      |                                   ^
  108 |     case 'ws': wsModule = require('ws'); break;
  109 |     default: throw new Error('unknown wsEngine');
  110 |   }

仅使用节点index.js运行即可正常运行。可能是因为在执行脚本时,实际上并没有经过需要uws的那一行,而是使用包裹,我认为ts编译器正在尝试找出require()语句所需的每个模块,即使从未执行过该代码。我写这个吗?如果是这样,您会提出什么建议。我只是通过添加uws依赖关系来解决,但这是唯一的方法吗?

任何帮助都会非常感激。

编辑: 关于问题2和问题3,在通读ts文件node_modules / @ types的代码后,我发现它们只是名称空间和类型定义,以使js模块与ts而不是ts版本兼容。

1 个答案:

答案 0 :(得分:0)

关于问题2和3,在通读ts文件node_modules / @ types的代码后,我发现它们只是名称空间和类型定义,以使js模块与ts兼容,而不是完全重写的ts版本的模块

问题4与打字稿无关,而是由模块开发人员将存储库更新为空引起的。有相同问题的任何人都可以通过使用模块的旧版本来解决此问题。 https://github.com/socketio/socket.io/issues/3342