Javascript 在浏览器中导入RxJS 6?
现在,我正在尝试在浏览器中导入代码。我们可以从中获取Javascript 在浏览器中导入RxJS 6?,javascript,npm,rxjs,jspm,unpkg,Javascript,Npm,Rxjs,Jspm,Unpkg,现在,我正在尝试在浏览器中导入代码。我们可以从中获取npm模块,我找到了这个项目,它将npm模块包装成一种可以被浏览器使用的格式 但我仍然有问题,最明显的是我的问题。从版本6开始,RxJS建议您像这样导入构造函数和运算符: import { Observable, Subject, ReplaySubject, from, of, range } from 'rxjs'; import { map, filter, switchMap } from 'rxjs/operators'; 但是,如
npm
模块,我找到了这个项目,它将npm
模块包装成一种可以被浏览器使用的格式
但我仍然有问题,最明显的是我的问题。从版本6开始,RxJS建议您像这样导入构造函数和运算符:
import { Observable, Subject, ReplaySubject, from, of, range } from 'rxjs';
import { map, filter, switchMap } from 'rxjs/operators';
但是,如果我尝试在浏览器中使用以下工具执行此操作:
import { Observable, Subject, ReplaySubject, from, of, range } from 'https://dev.jspm.io/rxjs@6';
import { map, filter, switchMap } from 'https://dev.jspm.io/rxjs@6/operators';
我得到的错误如下:
未捕获的语法错误:请求的模块“”未提供名为“map”的导出
我可以通过导入整个rxjs
模块并挑出我需要的东西来解决这个问题,就像使用CDN一样:
import rxjs from 'https://dev.jspm.io/rxjs@6';
const { Observable } = rxjs;
import operators from 'https://dev.jspm.io/rxjs@6/operators';
const { map } = operators;
但是,这挫败了Rx团队为减少最终捆绑包大小等所做的努力
我相信这不仅仅是RxJS的问题
为了让我们的开发javascript(直接导入到浏览器中)看起来像我们最终想要传递给bundler的东西,这里的解决方案是什么 下面是一个简单的rxjs入门示例stackblitz:
es6模块导出语法位于子文件夹
\u esm2015
中。因此,您需要导入:
import{Observable,Subject,ReplaySubject,from,of,range}from'https://dev.jspm.io/rxjs@6/(2015);;
从导入{map,filter,switchMap}https://dev.jspm.io/rxjs@6/_esm2015/运营商”;
遗憾的是,您不能只使用
npm安装来安装rxjsrxjs@6
然后在浏览器中导入,因为分发源缺少导入
语句中的文件扩展名.js
:
但是浏览器需要导入文件扩展名(目前):():
//尚不支持:
从“jquery”导入{shout};
从'lib.mjs'导入{shout};
从'modules/lib.mjs'导入{shout};
//支持:
从'/lib.mjs'导入{shout};
从“../lib.mjs”导入{shout};
从'/modules/lib.mjs'导入{shout};
从导入{shout}'https://simple.example/modules/lib.mjs';
这方面还有一个问题:
- 旁注:将决定
目前,您必须依靠或制作自己的捆绑包(例如,使用@Ovidiu Dolha建议的汇总)。我认为这个答案并没有真正回答最初的问题。问题不仅在于加载rxjs,还在于以ESModules友好的方式加载它然后是(1,2,3)管道的
rxjs.of(tap(value=>console.log(value))
const
可能更好,const-tap=rxjs.operators.tap代码>通过解构进一步改进,如const{debounceTime,tap}=rxjs.operators
,现在您可以根据需要添加到列表中,甚至更难的是使用import'rxjs/add/operator…
语法。。。我相信答案并不简单,我要研究的(如果我手头有时间的话)是一种将rxjs的各个模块打包成各个es6兼容单元的方法。我认为可以使用类似于rollup
的方法来实现。
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.1.0/rxjs.umd.js">
rxjs.of(1, 2, 3)
.subscribe(x => {
const element = document.createElement('div');
element.innerText = 'Data: ' + x;
document.body.appendChild(element)
},
err => { },
() => {
const element = document.createElement('div');
element.innerText = 'All done';
document.body.appendChild(element)
});