2016-04-22 68 views
0

如何更新我的.ts源代碼,類型定義和/或webpack配置以確保構建中包含輔助大括號編輯器代碼?如何編譯導入補充Javascript源代碼的TypeScript模塊?

我在TypeScript中構建一個瀏覽器應用程序並使用webpack構建它。我想使用沒有現有類型定義文件的brace editor組件。我有以下準系統類型的文件:

declare module brace { 
    export interface ISession { 
     setMode(mode:string); 
    } 

    export interface IEditor { 
     getSession():ISession; 
     setTheme(theme:string); 
    } 
} 
export function edit(selector:string):brace.IEditor 

這讓我編譯應用程序有以下來源:

import * as Brace from 'brace'; 
... 
editor = Brace.edit(someElement); 
editor.getSession().setMode('ace/mode/javascript'); 
editor.setTheme('ace/theme/monokai'); 

的支柱模塊文檔建議使用以下的Javascript創建編輯:

var ace = require('brace'); 
require('brace/mode/javascript'); 
require('brace/theme/monokai'); 

var editor = ace.edit(someElement); 
editor.getSession().setMode('ace/mode/javascript'); 
editor.setTheme('ace/theme/monokai'); 

require()語句爲modetheme似乎是必要的,以便建設者(在我的情況下webpack)知道拉這個源代碼。

我如何更新我的.ts源代碼,類型定義,和/或配置的WebPack,以確保會議和模式代碼包含在構建?在我目前的設置中,他們不是,所以大括號提出了我想要避免的網絡請求。

回答

1

TypeScript將刪除所有在發出的代碼中未使用其值的require()語句。所以,一旦從TS編譯成JS,你的require語句就不存在了,webpack也不知道把它們包含在bundle中。

要解決這個問題,你可以做這樣的事情:

var braceDependencies = [ 
    require('brace/mode/javascript'), 
    require('brace/theme/monokai') 
]; 

但使用ES6讓您可以更清晰地做到這一點,當TS現在有"bare imports"支持:

import 'brace/mode/javascript'; 
import 'brace/theme/monokai'; 

而那些按原樣排出。