我还没有找到一个有价值的NodeJS和Typescript教程,所以我在没有指导的情况下潜入其中,果然我有一个问题。
我不明白这两行之间的区别:
import * as http from 'http';
// and
import http = require('http');他们似乎以同样的方式工作,但我想他们的行为可能有一些细微的差别,否则他们中的一个可能不会存在。
我确实理解第一种方法可以让我有选择地从一个模块导入,但是如果我导入所有模块,那么这两种方法之间有区别吗?有没有更好的方式?如果我从我自己的文件导入,会有什么改变吗?
发布于 2016-03-02 14:01:53
在第一种形式中,你在代码中创建一个 http 对象(完全干净),然后,解释器将在http模块中查找每个可能的导入,并将其逐一附加到代码中的http对象,这比第二种形式慢(不多),在第二种形式中,您在http模块中定义module.exports对象,然后将此引用复制到代码中的新http对象,这是具有特定上下文的节点特殊函数中的对象,而不仅仅是在代码中创建的具有模块内容的对象。
发布于 2016-03-02 00:38:50
而在将模块类型配置为common JS的节点环境中,输出将是相同的。其他模块框架将使用不同的语法,通过使用第一种方法,您可以灵活地随意更改它。
关于import * as http from 'http';方法还需要注意的是,它是ES6模块导入语法,因此一旦您处于完全支持ES6的环境中,您的导入就会正常工作。
发布于 2020-06-11 02:40:17
import http = require('http') //Common JS这是通用的JS模块。在版本12.2之前,这是在节点JS中使用模块的唯一方式。
import * as http from 'http'; //ES 6这是ES6模块。在Javascript 6标准中,模块由ECMAScript原生支持。Node JS在版本12.2中实现了此功能。
在这两个模块中,我总是更喜欢ES6模块,因为它是javascript实现的一部分。浏览器也支持ES6模块。但浏览器不支持通用JS,因为它是同步的。与CommonJS不同,在ES 6之前的浏览器中使用了AMD模块,因为它是异步的
https://stackoverflow.com/questions/35728117
复制相似问题