javascript - 如果 env 是 NodeJS,则加载另一个 esm 文件
问题描述
在一个文件中,我直接从 http url 加载一些内容。这在节点的...中不起作用
目前我有这种方法在节点和浏览器中都可以使用,但是顶级等待的实验性太强了,所以我正在寻找替代解决方案
// ./utilities.js
const WritableStream = globalThis.WritableStream ||
// works for browsers
await import('https://cdn.jsdelivr.net/npm/web-streams-polyfill@3/dist/ponyfill.es2018.mjs')
.then(r => r.WritableStream)
// fallback for NodeJs
.catch(() => {
// Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only file and data URLs are
// supported by the default ESM loader. Received protocol 'https:'
return import('web-streams-polyfill')
})
.then(r => r.WritableStream))
如果可能的话,我想做的是用 import maps in 覆盖./utilities.js
并./node-utilities.js
从package.json
NPM 加载其余部分,而不是如果它在 NodeJS 中运行我知道网络支持 import-maps,但我想反过来做并先做网络,然后在服务器端做映射(模块解析)。
// ./utilities.js
import { WritableStream } from 'https://cdn.jsdelivr.net/npm/web-streams-polyfill@3/dist/ponyfill.es2018.mjs'
export { WritableStream }
// ./node-utilities.js
import { WritableStream } from 'web-streams-polyfill'
export { WritableStream }
// index.js
// would load ./utilities.js in the browser and `./node-utilities.js` in NodeJS
import { WritableStream } from './utilities.js'
我不想使用isNode ? import(x) : import(y)
(如果更支持顶级等待,我可以使用,但事实并非如此)
我试过这个
"exports": {
"./src/utilities.js": "./src/node-utilities.js"
},
但仍然抛出 Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only file and data URLs are supported by the default ESM loader. Received protocol 'https:'
解决方案
推荐阅读
- python - 行函数上的 Pandas 列字符串方法
- excel - 如何比较两列的匹配值和非匹配值并以我想要的格式获取它?
- r - 计算数据框中每列唯一值的长度
- mule - 访问作为变量传递的数组的索引并增加索引值
- sql - Spark SQL:datediff 不会显示结果
- javascript - 在 Google Apps 脚本的 HTML 服务中循环时如何处理复选框?
- numpy - 如何结合 mxnet 修复 tensorboard 中的 numpy 错误?
- android - 需要知道如何将其重新写入 Volley
- python - Tensorflow slice(None, None, None))' 是无效键
- architecture - 富域模型是否意味着可以接受大型域类?