cbu*_*ler 1 javascript ecmascript-6 es6-modules
使用 svelte 编译器从合成文件(字符串)生成代码。其输出也是一个字符串,但它添加了 svelte 本身的导入语句。我需要从生成的代码中删除所有这些导入语句,但我还需要获取这些导入语句并以可以从 CDN 导入/要求的方式添加它们。
我打算将这些导入语句解析为:
import { SvelteComponent, append, etc. } from "svelte/internal";
Run Code Online (Sandbox Code Playgroud)
并将其替换为以下内容:
const { SvelteComponent, append, etc. } = svelte.internal;
Run Code Online (Sandbox Code Playgroud)
我最初的想法是,是否可以将代码内联添加到 js 模块中,以从纯 js / es6 的 CDN 导入/需要脚本(在本例中为 svelte)。该项目是用 React 编写的,我已经编写了自己的钩子来动态加载脚本,但我认为需要将其添加到 iframe 的窗口中。但回想一下模块是如何工作的,我相信将脚本添加到父窗口也是可行的。所以我的问题是,如何将脚本从 CDN 的导入添加到我的 javascript 模块中?
T.J*_*der 10
答案取决于宿主环境。对于浏览器来说,答案是肯定的(假设您正在导入的资源与正在导入的资源兼容)。(相比之下,对于 Node.js 来说,答案是否定的,至少目前是这样。)这两种环境中的模块说明符都可以是完整的 URL。请注意,通过加载的模块脚本import受同源策略的约束,因此另一端必须为它们提供适当的 CORS 标头,以允许您的站点使用它们。(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>Run Code Online (Sandbox Code Playgroud)