Você pode usar loadScript() para carregar JS, mesmo que a URL fornecida seja uma URL externa. Usar serviços externos como jsdelivr deve funcionar com isso.
import loadScript from "discourse/lib/load-script";
...
loadScript(URL).then(() => {
// seu código
})
Embora eu não tenha testado extensivamente, um import dinâmico também deve funcionar.
async function load() {
const {
default: myDefault,
foo,
bar,
} = await import(URL);
// resto do código
}
Devo notar que é provavelmente mais seguro salvar os arquivos NPM diretamente em seu código em vez de depender de uma CDN externa, dependendo de quão crítico o JS é. Da mesma forma, você pode precisar fazer um pouco de empacotamento e pré-processamento antes de poder usá-lo no navegador.
Quanto a saber se o Immer funcionará com o discourse, eu não sei.