将 UMD Javascript 模块导入浏览器

Nei*_*eil 8 javascript reactive-programming rxjs umd es6-modules

嗨,我正在对 RxJS 进行一些研究。我可以简单地通过在我的浏览器中引用它来使用该库:

<script src="https://unpkg.com/@reactivex/rxjs@5.5.6/dist/global/Rx.js"></script>
Run Code Online (Sandbox Code Playgroud)

它使用全局对象命名空间变量“Rx”导入。我可以制作 observables 并做所有有趣的事情。

当我将 src 更改为指向最新的 UMD 文件时,一切都会崩溃 <script src="https://unpkg.com/rxjs/bundles/rxjs.umd.js"></script>

导入似乎不起作用,因为导出的对象函数似乎不存在?

我正在尝试使用一个名为“fromEvent”的特定函数,它允许从任何 DOM 事件创建一个可观察对象。

使用最新的 RxJS 6.2.2 UMD 文件时出现错误。

为什么是这样?如果你查看底部的 js 文件,你可以看到函数的导出,在文件的顶部你会看到名为“rxjs”的全局命名空间。

我没有使用任何像 requirejs 这样的加载器,也没有启用任何实验性浏览器功能。我没有使用任何“导入”语句。

我只是想引用脚本对象的全局命名空间。除了 Rx 与 rxjs 之外,模块定义的语法是相同的。

要复制错误,只需创建一个 Observable.fromEvent(.... 并观察错误控制台。

谢谢!

Tom*_*ott 10

这是 2020 年使用浏览器模块和动态导入导入 UMD 模块的单行代码。

export default async (url, module = {exports:{}}) =>
  (Function('module', 'exports', await (await fetch(url)).text()).call(module, module, module.exports), module).exports
Run Code Online (Sandbox Code Playgroud)

使用示例:

const ednToJS = await importUMD(`https://unpkg.com/edn-to-js@0.1.2/dist/main.js`)
const rxjs = await importUMD('https://unpkg.com/rxjs@6.6.3/bundles/rxjs.umd.js')
Run Code Online (Sandbox Code Playgroud)

多田


mar*_*tin 5

  1. 最近 UMD 包被重命名为 just rxjs,请参阅https://github.com/ReactiveX/rxjs/commit/556c904ea61a8424e5d24f170b20eadbc05d01f0#diff-6d2911fe563068b8126098588db98a84

  2. 如果您想使用 RxJS 6,则需要切换到“pipable”运算符(和创建函数),请参阅https://github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/v6/migration.md #运算符管道语法

例如,这有效:

<script src="https://unpkg.com/rxjs/bundles/rxjs.umd.js"></script>
<script>
rxjs.fromEvent(document, 'click').subscribe(console.log);
</script>
Run Code Online (Sandbox Code Playgroud)

演示:https://stackblitz.com/edit/rxjs6-demo-r2rtbz? file=index.html


小智 5

export default async function (url, module = {exports:{}})
{
    const response = await fetch(url);
    const script = await response.text();
    const func = Function("module", "exports", script)
    func.call(module, module, module.exports);
    return module.exports;
};
Run Code Online (Sandbox Code Playgroud)

相同的代码重新格式化