是否可以在 javascript 或 es6 中从 cdn 要求或导入资源
Is it possible to require or import resource from cdn in javascript or es6
使用 svelte 编译器从合成文件(字符串)生成代码。它的输出也是一个字符串,但它从 svelte 本身添加了 import 语句。我需要从生成的代码中删除所有这些导入语句,但我还需要获取这些导入语句并以我可以从 cdn 导入/需要的方式添加它们。
我打算将这些导入语句解析为如下内容:
import { SvelteComponent, append, etc. } from "svelte/internal";
并将其替换为:
const { SvelteComponent, append, etc. } = svelte.internal;
我最初的想法是,我是否可以将内联代码添加到 js 模块中,以从纯 js / es6 中的 cdn 导入/需要脚本(在本例中为 svelte)。该项目是用 React 编写的,我已经编写了自己的钩子来动态加载脚本,但我认为需要将它添加到 iframe 的 window。但是回想一下模块是如何工作的,我相信将脚本添加到父 window 也会起作用。所以我的问题是,如何将脚本从 cdn 的导入添加到我的 javascript 模块中?
答案取决于宿主环境。对于浏览器,答案是肯定的(假设您导入的资源与被导入的资源兼容)。 (相比之下,对于 Node.js,答案是否定的,至少目前是这样。)这两种环境中的模块说明符都可以是完整的 URL。请注意,通过 import
加载的模块脚本受同源策略的约束,因此另一端必须为它们提供适当的 CORS headers 以允许您的站点使用它们。 (CDN 通常会这样做。)
这是一个浏览器示例,导入 Vue.js 的 JavaScript 模块版本:
<script type="module">
import {version} from "https://cdnjs.cloudflare.com/ajax/libs/vue/3.0.5/vue.esm-browser.js";
console.log(version);
</script>
使用 svelte 编译器从合成文件(字符串)生成代码。它的输出也是一个字符串,但它从 svelte 本身添加了 import 语句。我需要从生成的代码中删除所有这些导入语句,但我还需要获取这些导入语句并以我可以从 cdn 导入/需要的方式添加它们。
我打算将这些导入语句解析为如下内容:
import { SvelteComponent, append, etc. } from "svelte/internal";
并将其替换为:
const { SvelteComponent, append, etc. } = svelte.internal;
我最初的想法是,我是否可以将内联代码添加到 js 模块中,以从纯 js / es6 中的 cdn 导入/需要脚本(在本例中为 svelte)。该项目是用 React 编写的,我已经编写了自己的钩子来动态加载脚本,但我认为需要将它添加到 iframe 的 window。但是回想一下模块是如何工作的,我相信将脚本添加到父 window 也会起作用。所以我的问题是,如何将脚本从 cdn 的导入添加到我的 javascript 模块中?
答案取决于宿主环境。对于浏览器,答案是肯定的(假设您导入的资源与被导入的资源兼容)。 (相比之下,对于 Node.js,答案是否定的,至少目前是这样。)这两种环境中的模块说明符都可以是完整的 URL。请注意,通过 import
加载的模块脚本受同源策略的约束,因此另一端必须为它们提供适当的 CORS headers 以允许您的站点使用它们。 (CDN 通常会这样做。)
这是一个浏览器示例,导入 Vue.js 的 JavaScript 模块版本:
<script type="module">
import {version} from "https://cdnjs.cloudflare.com/ajax/libs/vue/3.0.5/vue.esm-browser.js";
console.log(version);
</script>