什么是在typescript中导入模块的方法以及require js在模块加载中的作用

时间:2016-04-29 12:06:14

标签: javascript module typescript require

我是打字稿的新手,需要js。我已经看到了几种在typescript中导入模块的方法。但我不清楚以下代码在做什么..

1./// <reference path="foo.ts" />
2.import {utils} from "./util";
3.require(["bar"],function(bar){
  //use module here
  });
4.define(["bar"],function(bar){
  //use module here
  });
5.requirejs(["bar"],function(bar){
  //use module here
  });

他们彼此如何不同。请帮忙。

2 个答案:

答案 0 :(得分:1)

  1. TypeScript-specific way of loading modules
  2. Is the standard way of loading modules
  3. RequireJS加载模块的方式。
  4. RequireJS是一个在JS拥有加载模块的官方语法之前就已存在的库。 RequireJS模块使用define调用,传入依赖项和在加载所有依赖项时运行的函数来定义。 require调用启动了加载过程,通常在应用程序的最开始处找到。

    import / export是加载JavaScript模块的标准语法。去年,语法标准化为iirc。模块解析不是标准化的,目前也不是由任何浏览器实现的。但是这种语法被不同的工具用来“编译”JS。

    我无法解释很多TypeScript。该文章应该为您提供所需的一切。

      

    ///指令是该组中最常见的。它充当文件之间的依赖声明。

答案 1 :(得分:0)

要真正理解这一点,您应该查看JavaScript中模块的历史记录。该语言在最新版本中仅支持官方模块,并非所有浏览器都支持此功能。这是一些好文章的列表。

http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html https://addyosmani.com/writing-modular-js/

要回答您的问题,第一种类型用于内部模块(现在重命名为名称空间)。如果你有多个源文件,你可以使用它们,但是它们会被编译成一个文件(使用outFile编译器选项)。

第二种类型是新的ES6标准模块语法。您可以在源代码中使用它,但是,现在,它将被编译为AMD或CommonJS或SystemJS语法(遵循ES6标准)。

其余的是AMD模块语法,define用于定义将导出一些代码的模块。 require用于导入代码将使用的模块。您无法使用require导出任何代码,因此通常只对主脚本文件使用一次。

使用当前版本的TypeScript,您不会使用AMD或CommonJS语法,您将使用标准的ES6模块语法,然后您的编译器会根据您的module属性将其编译为正确的模块类型。 tsconfig.json档案。