2016-04-29 71 views
1

我是打字稿的新手,需要js。我已經看到了幾種在打字稿中導入模塊的方法。但我不清楚下面的代碼在做什麼。什麼是導入打字稿中的模塊的方法,以及require js在模塊加載中的作用

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 
    }); 

它們是如何相互區別的。任何人請幫助。

回答

1
  1. TypeScript-specific way of loading modules
  2. Is the standard way of loading modules
  3. 是如何​​負載模塊。

RequireJS是一個庫,它存在於JS有加載模塊的官方語法之前。 RequireJS模塊使用define調用來定義,傳入依賴關係和一個在加載所有依賴關係時運行的函數。 A require調用是什麼啓動加載過程,通常在應用程序的開始時發現。

import/export是加載JavaScript模塊的標準語法。去年的語法標準化iirc。目前,模塊分辨率不是標準化的,也不是由任何瀏覽器實現的。但是這個語法被不同的工具用來「編譯」JS。

我無法解釋很多TypeScript的問題。文章應該爲您提供您需要的一切。

///指令是該組中最常見的。它用作文件之間依賴關係的聲明。

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導出任何代碼,因此您通常只會將這一次用於主腳本文件。

隨着打字稿的當前版本,你不會使用AMD或CommonJS的語法,你可以使用標準的ES6模塊語法,然後你的編譯器編譯到正確的模塊類型爲每module財產在tsconfig.json文件。