上一篇:使用Theia——建立插件html
extension/ data/ grammars go here lib/ ... src/ ... package.json ...
而後,在package.json文件中聲明如下屬性,這樣新提供的語法能夠與源代碼和編譯的文件一同發佈。json
"files": [ "data", "lib", "src" ],
在擴展包中,咱們能夠經過LanguageGrammarDefinitionContribution的contribution point來提供這一特性。服務器
@injectable() export class YourContribution implements LanguageGrammarDefinitionContribution { readonly id = 'languageId'; readonly scopeName = 'source.yourLanguage'; registerTextmateLanguage(registry: TextmateRegisty) { registry.registerTextmateGrammarScope(this.scopeName, { async getGrammarDefinition() { return { format: 'json', content: require('../data/yourGrammar.tmLanguage.json'), } } }); registry.mapLanguageIdToTextmateGrammar(this.id, this.scopeName); } }
若是使用.plist語法,則不能使用require來直接獲取內容,由於Webpack將返回從服務器獲取的文件的名稱。這種狀況下,能夠使用下面的模式來獲取文件的內容:async
@injectable() export class YourContribution implements LanguageGrammarDefinitionContribution { readonly id = 'languageId'; readonly scopeName = 'source.yourLanguage'; registerTextmateLanguage(registry: TextmateRegisty) { registry.registerTextmateGrammarScope(this.scopeName, { async getGrammarDefinition() { const response = await fetch(require('../data/yourGrammar.plist')); return { format: 'plist', content: await response.text(), } } }); registry.mapLanguageIdToTextmateGrammar(this.id, this.scopeName); } }