首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >import http = require(' http ');和import * as http from 'http';之间的区别?

import http = require(' http ');和import * as http from 'http';之间的区别?
EN

Stack Overflow用户
提问于 2016-03-02 00:24:53
回答 3查看 33.7K关注 0票数 18

我还没有找到一个有价值的NodeJS和Typescript教程,所以我在没有指导的情况下潜入其中,果然我有一个问题。

我不明白这两行之间的区别:

代码语言:javascript
复制
import * as http from 'http';
// and
import http = require('http');

他们似乎以同样的方式工作,但我想他们的行为可能有一些细微的差别,否则他们中的一个可能不会存在。

我确实理解第一种方法可以让我有选择地从一个模块导入,但是如果我导入所有模块,那么这两种方法之间有区别吗?有没有更好的方式?如果我从我自己的文件导入,会有什么改变吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-02 14:01:53

在第一种形式中,你在代码中创建一个 http 对象(完全干净),然后,解释器将在http模块中查找每个可能的导入,并将其逐一附加到代码中的http对象,这比第二种形式慢(不多),在第二种形式中,您在http模块中定义module.exports对象,然后将此引用复制到代码中的新http对象,这是具有特定上下文的节点特殊函数中的对象,而不仅仅是在代码中创建的具有模块内容的对象。

票数 11
EN

Stack Overflow用户

发布于 2016-03-02 00:38:50

而在将模块类型配置为common JS的节点环境中,输出将是相同的。其他模块框架将使用不同的语法,通过使用第一种方法,您可以灵活地随意更改它。

关于import * as http from 'http';方法还需要注意的是,它是ES6模块导入语法,因此一旦您处于完全支持ES6的环境中,您的导入就会正常工作。

票数 3
EN

Stack Overflow用户

发布于 2020-06-11 02:40:17

代码语言:javascript
复制
import http = require('http') //Common JS

这是通用的JS模块。在版本12.2之前,这是在节点JS中使用模块的唯一方式。

代码语言:javascript
复制
import * as http from 'http'; //ES 6

这是ES6模块。在Javascript 6标准中,模块由ECMAScript原生支持。Node JS在版本12.2中实现了此功能。

在这两个模块中,我总是更喜欢ES6模块,因为它是javascript实现的一部分。浏览器也支持ES6模块。但浏览器不支持通用JS,因为它是同步的。与CommonJS不同,在ES 6之前的浏览器中使用了AMD模块,因为它是异步的

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35728117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档