用户登录

*参考网站*:https://github.com/DefinitelyTyped/DefinitelyTyped

我们再观察一下前面执行 tsc 命令之后出现的这个错误提示:

Cannot find name 'require'.
Do you need to install type definitions for node?
Try `npm i @types/node`.

1 const express = require('express');
~~~~~~~

意思是说它没找到 require 这个东西,是不是得先为 node 安装相关的类型定义?它还给出了具体出错的地方。require() 是在 Node.js 里用来导入模块用的一个方法,这种方法并不是 JavaScript 标准的导入模块的写法,因为当初 Node.js 引入模块这个概念的时候,JavaScript 语言还没有提供自己的模块系统,所以 Node.js 就选择使用了一种叫 CommonJS 的模块写法。后来 JavaScript 推出了自己的模块系统,不过可能因为历史原因,至今 Node.js 并没有实施使用标准的 JavaScript 模块系统。

现在我们的项目已经可以用 TypeScript 了,所以可以我们就可以使用 JavaScript 标准的模块系统来创建与使用模块了。至于怎么跟 Node.js 解释,可以交给 TypeScript 的编译工具。

这里 TypeScript 的意思并不是说我们不能用 require(),只是它不知道这东西是什么,在上面的错误提示里也说明了,是不是可以为 Node.js 安装一下它的类型定义?安装了相关的类型定义以后,TypeScript 就知道 require() 还有跟 Node.js 相关的其它的东西了。

在终端,项目所在目录的下面,执行:

npm install @types/node --save-dev

上面安装了一个包,名字是 @types/node,让它作为我们的项目的开发依赖。这些单独安装的类型定义包,它们的名字里都会带着 @types 这个前缀。安装了 @types/node 这个包以后,TypeScript 的编译工具就知道跟 Node.js 本身相关的一些东西了。重新在项目里执行一下 tsc,这次编译项目的时候,编译工具就不会提示之前我们看到的错误了,因为它现在已经知道在 Node.js 用来导入模块的 require() 这个东西是什么了。

@types/node《 Node.js 服务端应用开发:工作流程 》

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点