NodeJS 有浏览器的 crypto.subtle 的实验性实现。
我编写了一个可以在浏览器和 NodeJS 中运行的 Javascript 模块。它需要进入微妙的领域。
目前,每个需要使用
subtle
的函数在开始执行时都会等待以下函数:
async function getSubtle() {
if (typeof window === 'undefined') { // running in NodeJS
const crypto = await import('crypto');
return crypto.webcrypto.subtle;
} else { // running in a browser
return crypto.subtle;
}
}
这可行,但速度慢且丑陋,因为我在每个函数调用(在 NodeJS 中)上重新导入代码。
我的项目很简单,我不使用构建系统。 (我使用表达和符号链接我需要的模块,例如从
public/js/modules/foo.mjs
到 lib/foo.js
。)
我可以用模块级非异步条件导入替换
getSubtle()
吗?如果是的话,怎么办?
这适用于节点和浏览器:
globalThis.crypto.randomUUID()
和
globalThis.crypto