1

从 UMD 模块命名导入(不是应该在浏览器中工作的 UMD,而 Deno 似乎类似于浏览器?):

import { range } from "https://unpkg.com/@reactivex/rxjs@6.6.3/dist/global/rxjs.umd.js";
import { operators } from "https://unpkg.com/@reactivex/rxjs@6.6.3/dist/global/rxjs.umd.js"; 

结果是

error: Uncaught SyntaxError: The requested module 'https://unpkg.com/@reactivex/rxjs@6.6.3/dist/global/rxjs.umd.js' does not provide an export named 'operators'
error: Uncaught SyntaxError: The requested module 'https://unpkg.com/@reactivex/rxjs@6.6.3/dist/global/rxjs.umd.js' does not provide an export named 'range'

也直接从 ES2015 导入

import { range } from "https://unpkg.com/@reactivex/rxjs@6.6.3/dist/esm2015/index.js";
import { filter, map } from "https://unpkg.com/@reactivex/rxjs@6.6.3/dist/esm2015/operators/index.js";

似乎正在工作,加载了很多内部模块然后崩溃:

Download https://unpkg.com/@reactivex/rxjs@6.6.3/dist/esm2015/internal/observable/fromEvent
/// downloads 150 internal modules
Download https://unpkg.com/@reactivex/rxjs@6.6.3/dist/esm2015/internal/util/Immediate.js  // 5 minutes later
error: Import 'https://unpkg.com/@reactivex/rxjs@6.6.3/dist/esm2015/internal/symbol/observable.js' failed: 500 Internal Server Error
    at https://unpkg.com/@reactivex/rxjs@6.6.3/dist/esm2015/index.js:4:0

RxJS 似乎是一个维护得相当好的库 - 我不认为它的打包不正确,但由于它确实开始下载内部 es2015 模块,我假设导入正确完成


更新:UMD 的使用仍未解决,仍不清楚“dist/global/rxjs.umd.js”如何工作

4

1 回答 1

1

在某处有记录——找不到参考——unpkg 将 esm2015 包分解为子包(esm2015/operators/index.js)

找不到从 UMD 导入的方法,但是:

// @deno-types="https://unpkg.com/rxjs@6.6.3/index.d.ts"

//unpkg
import { range } from "https://unpkg.com/@reactivex/rxjs@6.6.3/dist/esm2015/index.js";
import { filter, map } from "https://unpkg.com/@reactivex/rxjs@6.6.3/dist/esm2015/operators/index.js";

// skypack or pika.dev
import { range }from 'https://cdn.skypack.dev/rxjs';    // WORKS!!!
import { map, filter }from 'https://cdn.skypack.dev/rxjs/operators';

// jspm
import { range } from "https://jspm.dev/npm:rxjs@6.6.3";   // WORKS!!!
import { map, filter } from "https://jspm.dev/npm:rxjs@6.6.3/operators";

// code to verify imports work properly
range(1, 200)
  .pipe(
    filter((x:number) => x % 2 === 1),
    map((x:number) => x + x)
  )
  .subscribe((x:number) => console.log(x));

/*
2
6
10
14
...
390
394
398
*/

需要进一步研究:

  • https://cdn.esm.sh => "esm.sh 将使用 https://deno.land/std/node 填充节点内部模块(fs、os 等)支持某些模块在 Deno 中工作"
  • skypack.dev 似乎能够支持比最初想象的更多的功能import { range } from "https://cdn.skypack.dev/pin/rxjs@v6.6.3-Hu9diWQqdrdn7RiydblX/mode=imports/optimized/rxjs.js";
于 2021-02-15T23:59:58.187 回答