Javascript 如何在节点ESM模块加载器中使用HTTP URL?

Javascript 如何在节点ESM模块加载器中使用HTTP URL?,javascript,node.js,esm,Javascript,Node.js,Esm,我有以下从“mongodb”导入mongo我希望避免使用npm,而是像这样使用unpkg.com从导入mongo”https://unpkg.com/mongodb";。然而,当我跑步时,我得到 ...@penguin:~/...$ node --harmony test.mjs node:internal/process/esm_loader:74 internalBinding('errors').triggerUncaughtException(

我有以下
从“mongodb”导入mongo我希望避免使用npm,而是像这样使用unpkg.com
从导入mongo”https://unpkg.com/mongodb";。然而,当我跑步时,我得到

...@penguin:~/...$ node --harmony test.mjs node:internal/process/esm_loader:74
    internalBinding('errors').triggerUncaughtException(
                              ^

Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only file and data URLs are supported by the default ESM loader. Received protocol 'https:'
    at new NodeError (node:internal/errors:328:5)
    at Loader.defaultResolve [as _resolve] (node:internal/modules/esm/resolve:825:11)
    at Loader.resolve (node:internal/modules/esm/loader:86:40)
    at Loader.getModuleJob (node:internal/modules/esm/loader:230:28)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:56:40)
    at link (node:internal/modules/esm/module_job:55:36) {
  code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME'
}
…@penguin:~/…$node--harmony test.mjs node:internal/process/esm\u loader:74
internalBinding('errors')。triggerUncaughtException(
^
错误[ERR_UNSUPPORTED_ESM_URL_SCHEME]:默认ESM加载程序只支持文件和数据URL。收到的协议“https:”
在新节点错误(节点:内部/错误:328:5)
在Loader.defaultResolve[as R u resolve](节点:internal/modules/esm/resolve:825:11)
在Loader.resolve(节点:内部/modules/esm/Loader:86:40)
在Loader.getModuleJob(节点:内部/modules/esm/Loader:230:28)
模块包装处。(节点:内部/模块/esm/模块作业:56:40)
at链路(节点:内部/模块/esm/模块作业:55:36){
代码:“错误\u不支持\u ESM\u URL\u方案”
}

因为它使用术语“默认模块加载器”,我想知道是否有其他ESM加载器可以使用。

Node不支持通过HTTP/HTTPS URL加载ES模块,但它对模块加载器有实验性支持,甚至以HTTPS加载器为例:

//https-loader.mjs
从“https”导入{get};
导出函数解析(说明符、上下文、defaultResolve){
const{parentURL=null}=context;
//通常Node.js会在以“https://”开头的说明符上出错,因此
//这个钩子截取它们,并将它们转换为绝对URL,以便
//传递到后面的钩子下面。
if(说明符.startsWith('https://')){
返回{
url:说明符
};
}else if(parentURL&&parentURL.startsWith('https://')){
返回{
url:新url(说明符,parentURL).href
};
}
//让Node.js处理所有其他说明符。
返回defaultResolve(说明符、上下文、defaultResolve);
}
导出函数getFormat(url、上下文、defaultGetFormat){
//此加载程序假定所有网络提供的JavaScript都是ES模块代码。
if(url.startsWith('https://')){
返回{
格式:“模块”
};
}
//让Node.js处理所有其他URL。
返回defaultGetFormat(url、上下文、defaultGetFormat);
}
导出函数getSource(url、上下文、defaultGetSource){
//为了通过网络加载JavaScript,我们需要获取和
//归还它。
if(url.startsWith('https://')){
返回新承诺((解决、拒绝)=>{
获取(url,(res)=>{
让数据=“”;
res.on('data',(chunk)=>data+=chunk);
res.on('end',()=>resolve({source:data}));
}).on('error',(err)=>拒绝(err));
});
}
//让Node.js处理所有其他URL。
返回defaultGetSource(url、上下文、defaultGetSource);
}
像这样使用:

node节点——实验加载程序。/https-loader.mjs./main.mjs