【问题标题】:Difference between import http = require('http'); and import * as http from 'http';?import http = require('http'); 的区别并从'http'导入*作为http;?
【发布时间】:2016-06-14 04:16:45
【问题描述】:

我找不到有价值的 NodeJS with Typescript 教程,所以我在无指导下潜入水中,果然我有一个问题。

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

import * as http from 'http';
// and
import http = require('http');

它们的功能似乎相同,但我想它们的行为可能存在一些细微差别,否则它们中的一个可能不存在。

我明白第一种方法可以让我有选择地从一个模块导入,但如果我要导入所有模块,那么两者之间有区别吗?有首选方法吗?如果我从自己的文件中导入,会发生什么变化吗?

【问题讨论】:

标签: node.js typescript


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    import http = require('http') //Common JS
    

    这是常见的 JS 模块。在 12.2 版本之前,这是在 node JS 中使用模块的唯一方法。

    import * as http from 'http'; //ES 6
    

    这是 ES6 模块。在 ECMAScript 6 标准中,Javascript 原生支持模块。 Node JS 在 12.2 版本中实现了这个特性。

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-06-15
        • 2012-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-12
        • 1970-01-01
        • 1970-01-01
        • 2014-10-09
        相关资源
        最近更新 更多