2015-10-14 51 views
2

我正在尋找更新一些較舊的js庫我必須使用ES6約定打字,但我遇到了一個絆腳石。內聯使用導入與打字稿1.6和es6語法

所以在歷史上,當我加載一個JSON文件動態,我會做這樣的事情:

this.someFunctionWhichDoesStuff = function() { 
    var config = require(theConfigDir); // theConfigDir was a variable 
    // ... other stuffs 
} 

這工作得很好,我也將在某些情況下,動態地包括從文件夾也有些模塊:

this.someFunctionWhichDoesStuff = function() { 
    var actualImplementationToUse = require(theDirectoryWithImplementation); // theConfigDir was a variable 
    // ... other stuffs 
} 

這使我可以根據早期的配置切換實現,並且運行良好。這裏需要注意的要點是,模塊的解析器是變量而不是靜態文本,並且它們在不在根級別的函數內部運行。

考慮到這一點我走到ES6風格模塊包括在TS和意識到我不能做上述情況,因爲這不是有效的語法

所以:

public someFunctionWhichDoesStuff() { 
     import actualImplementationToUse from theDirectoryWithImplementation; 
     // ... other stuffs 
    } 

它是有道理的,因爲我知道ES6模塊需要靜態地解析模塊,所以我很酷,但在打字稿1.6的世界中,我不確定如何解決這個問題,因爲var includedModule = require(theDirectory);似乎是無效的,因爲它不知道require,可以通過包含節點js d.ts文件,但是我希望有人能夠對未來新的es6世界中期望的方法進行一些指導?

+0

添加類型的require,我使用它來允許webpack需要的意見/風格... https://github.com/TypeStrong/ts-loader#loading-other-resources-and-code-splitting – Brocco

+0

確定我知道我可以做到這一點,但有沒有更多的'es6'這樣做?即如果我使用require,我被鎖定在所有消費者(無論是瀏覽器還是節點)上使用require,我想沒有,但我只是想在我走下這條路線之前進行檢查。 – Grofit

回答

0

確定我知道我可以做到這一點,但有沒有更多的es6方式做到這一點?即如果我使用require,我被鎖定在所有消費者(無論是瀏覽器還是節點)上使用require,我想沒有,但我只是想在我走下這條路線之前進行檢查。

ES6規範沒有指定模塊加載反正(SystemJS只是一個非樣本標準執行),而且大多要下來transpile到ES5。因此,使用require並不是一個壞主意(尤其是對於非.ts/.js文件)

+0

當然,但ES6規範包含了模塊和導入/導出的概念,因此SystemJS只是一個佔位符,直到本機支持ES6模塊語法爲止?無論如何,我希望在後面的場景中包含ts文件。有很多方法可以避開這個問題,比如只需使用require並將其當作任何對象來對待,或者通過導入包含所有可能的化身,並且只需選擇我想要的(但聽起來很亂)。解決這個問題可能沒有一個好的方法,因爲動態的需求調用在他們正在做的事情上是方便和簡潔的。 – Grofit