作为官方highlight.js usage document建议:
The default import imports all languages! Therefore it is likely to be more efficient to import only the library and the languages you need:
import hljs from 'highlight.js/lib/highlight';
import javascript from 'highlight.js/lib/languages/javascript';
hljs.registerLanguage('javascript', javascript);
我正在尝试仅加载
highlight.js
库,以及单独的语言模块,以减少我对我的 TS 应用程序的占用。使用
@types/highlight.js
声明文件,导入 highlight.js 的唯一方法(我能找到)是这样的:import * as hljs from 'highlight.js';
不幸的是,这会加载默认导出,该导出已加载所有已发布的语言。
查看 highlight.js 模块,我想做这样的事情:
import * as hljs from 'highlight.js/lib/highlight.js';
import * xml from 'highlight.js/lib/languages/xml';
...
hljs.registerLanguage('xml', xml);
所以我只得到库本身,以及我需要的唯一语言(xml)。
到目前为止,我已经能够在 .d.ts 文件中添加这些行,以使 TypeScript 不会提示这些导入:
declare module 'highlight.js/lib/highlight';
declare module 'highlight.js/lib/language/xml';
但是当然,这意味着我在导入
hljs
时失去了我的内容支持。 .我可以复制 @types/highlight.js
的内容到我自己的 .d.ts 文件中,但我真的很想避免这种情况。有什么方法可以代理
@types/highlight.js
的声明吗?到模块 highlight.js/lib/highlight'
?或者也许我错过了其他一些方法。提前致谢。
最佳答案
我通过创建一个只需要我需要的语言的 Javascript 文件解决了这个问题:
myhighlight.js
var hljs = require('../../../node_modules/highlight.js/lib/highlight');
hljs.registerLanguage('typescript', require('../../../node_modules/highlight.js/lib/languages/typescript'));
hljs.registerLanguage('json', require('../../../node_modules/highlight.js/lib/languages/json'));
module.exports = hljs;
通过在我的 Typescript 代码中导入这个文件:
import hljs from './myhighlight';
export class SomeClass {
highlight(code: string) {
return hljs.highlightAuto(code).value;
}
}
关于javascript - 使用 TypeScript 仅加载 highlight.js 库,而不是默认加载所有语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54334893/