Javascript 是否可以将子资源完整性与ES6模块导入一起使用?

Javascript 是否可以将子资源完整性与ES6模块导入一起使用?,javascript,http,ecmascript-6,Javascript,Http,Ecmascript 6,给定如下代码: import { el, mount } from 'https://unpkg.com/redom@3.2.1/dist/redom.es.js'; 是否有某种方法可以确保CDN资产返回预期内容?您可以使用RequireJS,并将代码传输到AMD或UMD以实现此目的。 RequireJS有一个hookonNodeCreated,它允许您在将脚本标记添加到文档之前访问它。 您可以将sri属性添加到script标记中: onNodeCreated:函数(节点、配置、模块、路径){

给定如下代码:

import { el, mount } from 'https://unpkg.com/redom@3.2.1/dist/redom.es.js';

是否有某种方法可以确保CDN资产返回预期内容?

您可以使用RequireJS,并将代码传输到AMD或UMD以实现此目的。 RequireJS有一个hook
onNodeCreated
,它允许您在将脚本标记添加到文档之前访问它。 您可以将
sri
属性添加到
script
标记中:

onNodeCreated:函数(节点、配置、模块、路径){ node.setAttribute('integrity',integrityForModule); setAttribute('crossorigin','anonymous'); }

学分:

我使用Webpack(目标是UMD)和RequireJS。 将相关模块放入网页包配置文件的
外部
部分,因此模块不会编译为传输代码。

您还必须通过


您所要求的内容特别需要对ECMAScript本身进行更改,而且目前甚至没有一个用于它的版本,所以我不希望它很快出现



但是,在UNPKG的情况下,如果您相信UNPKG和Cloudflare不会弄乱内容,,您就没事了。只要您指定版本,npm和包作者都不能修改文件。

由于Deno支持其依赖项的此类导入(并且没有现成的包管理器)和Node将来导入非文件URL的机会,这个问题变得更加重要


尽管@fregante提到的尚未提出提案的内容仍然准确,但包括讨论(包括通过引用)修改语法(例如,可传递依赖项缓存失效)以支持SRI以及其他可能的替代方案时提出的一些问题,您可以使用元素来执行完整性检查,不幸的是,目前仅在Blink浏览器中支持该检查

//默认脚本
导入(“https://unpkg.com/redom@3.2.1/dist/redom.es.js“)
.then(module=>console.log('from default script:',typeof module.List))
.catch(console.error)

从导入{List}”https://unpkg.com/redom@3.2.1/dist/redom.es.js”;
log('from module script:',typeof List);

如何改进我的问题?有什么问题吗?我不知道我做错了什么,为什么我投了反对票/我没有一个实际的答案,虽然我怀疑答案是否定的,因为这东西是如此的新,规范还没有真正完成。我还编辑了您的问题,删除了一些不必要的细节,使问题更清晰。您是否尝试过在支持这两种功能(即Chrome 61)的浏览器中设置
完整性属性,看起来有人在讨论如何让它基于一个具有完整性属性的
:这似乎是一种需要查询参数或其他东西的类型,但我不知道还有人在讨论这一点。除了信任服务器,还必须信任与它们的网络连接。在压迫性的政权下,国家ISP可以通过法律与认证机构勾结。有点像,但如果他们可以通过HTTPS更改服务内容,就没有什么可以拯救你;他们已经更改了您加载的HTML页面,包括删除任何
integrity
属性。我正在使用区块链,其主要内容更加可靠。对于像electron和cordova应用程序这样的应用程序,或者如果您的主主机只是有一个比unpkg更好的证书系统,则情况可能更为如此。Cloudflare保护了如此多的互联网,它将是一个比小型主机更具价值的门户。更多的检查总是有助于完整性。但他们也没有证明这一点。请注意,这在今天的Safari中不起作用。从Safari 14.0.1(当前最新版本)开始,如果您放入一个完整性已损坏的
标记,然后稍后导入同一URL,则
标记将无法加载,但
导入
将启动额外的网络请求,然后运行代码。