在 Javascript 模块中从浏览器和 NodeJS 中使用微妙

问题描述 投票:0回答:1

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()
吗?如果是的话,怎么办?

javascript node.js es6-modules
1个回答
0
投票

这适用于节点和浏览器:

globalThis.crypto.randomUUID()

globalThis.crypto
© www.soinside.com 2019 - 2024. All rights reserved.