Это мой код, который загружает зависимость из CDN:
< pre class="lang-js Prettyprint-override">
Код: Выделить всё
import { useLayoutEffect, useRef } from 'react';
import clsx from 'clsx';
import useIsBrowser from '@docusaurus/useIsBrowser';
import Head from '@docusaurus/Head';
import useScripts from '@site/src/hooks/useScripts';
import './styles.css';
const replReady = () => {
return (
globalThis.jQuery &&
globalThis.jQuery.terminal
);
}
import { initTerminal, destroyTerminal } from './terminal';
type InterpreterProps = {
className?: string;
};
const terminal_scripts = [
'https://cdn.jsdelivr.net/npm/jquery',
'https://cdn.jsdelivr.net/combine/npm/jquery.terminal/js/jquery.terminal.min.js,npm/js-polyfills/keyboard.js,npm/jquery.terminal/js/less.js'
]
export default function Interpreter({ className }: InterpreterProps): JSX.Element {
const ref = useRef();
const isProd = process.env.NODE_ENV === 'production';
const isBrowser = useIsBrowser();
const isStatic = isProd && !isBrowser && !globalThis.jQuery;
useScripts(!globalThis.jQuery && terminal_scripts);
useLayoutEffect(() => {
(function loop() {
if (replReady() && styleReady()) {
initTerminal();
} else {
setTimeout(loop, 100);
}
})();
return destroyTerminal;
}, []);
function styleReady() {
// hack to prevent initalizaing of jQuery Terminal before style is loaded
return !!getComputedStyle(ref.current).getPropertyValue('--base-background');
}
return (
{isStatic && terminal_scripts.map(script => {
return
})}
);
};
Это работает нормально, за исключением ошибок TypeScript при использовании:
Код: Выделить всё
globalThis.jQuery
Свойство jQuery не существует для типа typeof globalThis.
Я пытался импортировать файлы d.ts:
Код: Выделить всё
///
///
есть ли способ определить globalThis.jQuery в TypeScript? Было бы неплохо, если бы библиотека не входила в комплект.
Подробнее здесь: https://stackoverflow.com/questions/789 ... he-library
Мобильная версия