示例上下文
我正在基于从本地来源获取加密安全的随机字节来编写库。我想使该库在Node.js和浏览器中都可用。这要求在两种环境中使用不同的内置API。
问题
我正在寻找要使用的一般解决方案
基于环境检测。
该问题适用于以上示例上下文
为了使该库在Node.js和浏览器环境中均可用,在Node.js中crypto.randomBytes()
使用,并且window.crypto.getRandomValues()
在浏览器中用作随机源的基础。
当前工作的解决方案基于Node的dynamic require
。lib检测到环境,然后:
require('crypto')
,window.crypto.getRandomValues()
,在全局范围内只是可用,而无需/不需要导入。问题
而不是使用require()
,我想知道是否可以将ES6样式import { randomFill } from 'crypto';
与环境检测一起使用。导入仍将在浏览器中运行,但是浏览器中没有这样的内置模块,因此会出现问题。
您是否有任何经验(例如babel)和捆绑器(例如汇总)如何处理静态导入的此类问题?
注意:这不是如何在节点中使用es6导入的重复项?。我知道有ESM和--experimental-modules
,并且效果很好。我的问题是关于浏览器和Node.js环境都是实现的目标的情况,但是由于环境不同,必须使用不同的平台提供的API。
我不确定这是否能回答您的问题,但解决问题的方法基本上是通过我的webpack构建。
我可能会有点像导入:
import { base64encode } from './base64';
在此目录中,我有2个文件:
base64.js
base64.web.js
可以将webpack配置为首选第一个。其他浏览器构建工具也具有类似的功能。
这对我来说确实很好,但是只有在有“构建步骤”的情况下,这才是真正的选择。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句