目前只是在mac本上运行成功了,windows本上还没有试过,之后更新体验。 参考资料是:
我使用比较熟悉的npm来安装。
安装RxJS
本来想直接引用cdn上打包好的RxJS,结果老是出
not in module的错误,估计是需要项目化,还是怎么地,是个迷,之后能清楚了来补坑。创建一个文件夹,cd到这个文件夹下,先执行初始命令
npm init -y在执行安装,安装rxjs,webpack ,webpack server,typescript,ts-loader这些安装包。为啥装这么多包,我也没想明白,想明白回来补坑。
npm install rxjs webpack webpack-dev-server typescript ts-loader既然安装了webpack,那么还需要安装webpack的服务。
npm install webpack-cli --save-dev都安装好了之后,文件夹里应该有
package.json和node_modules
配置RxJS项目
配置package.json
添加自动打包的语言:之后运行
npm run start就可以了"scripts":{ "start":"webpack-dev-server --mode development" }完成后的全部结果如下:
{ "name": "你文件夹的名字", "version": "1.0.0", "description": "", "main": "index.js", "scripts": {//用于自动打包 "start": "webpack-dev-server --mode development" }, "keywords": [], "author": "", "license": "ISC", "dependencies": {//注意检查安装的包都有吗 "rxjs": "^6.5.4", "ts-loader": "^6.2.1", "typescript": "^3.7.5", "webpack": "^4.41.5", "webpack-dev-server": "^3.10.1" }, "devDependencies": {//注意检查webpack服务添加了吗 "webpack-cli": "^3.3.10" } }
创建webpack.config.js
const path = require('path'); module.exports = { //entry是程序的入口, 创建自己的js或ts,我用的是index.ts entry: './src/index.ts', devtool: 'inline-source-map', module: { rules: [ { test: /\.tsx?$/, use: 'ts-loader', exclude: /node_modules/ } ] }, resolve: { extensions: [ '.ts', '.js', '.tsx' ] }, output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist') } };
创建tsconfig.js
{ "compilerOptions": { "outDir": "./dist/", "noImplicitAny": true, "module": "es6", "moduleResolution": "node", "sourceMap": true, "target": "es6", "typeRoots": [ "node_modules/@types" ], "lib": [ "es2017", "dom" ] } }
测试项目成功了没有
添加一个index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Learn RxJS with Coursetro</title> <style> body { font-family: 'Arial',serif; background: #ececec; } ul { list-style-type: none; padding: 20px; } li { padding: 20px; background: white; margin-bottom: 5px; } </style> </head> <body> <h1>RxJS Learning Demo</h1> <ul id="output"></ul> <script src="/bundle.js"></script> </body> </html>创建一个index.ts来实验
import {Observable} from "rxjs"; var observable = Observable.create((observer:any)=>{ observer.next("Hello world"); }); observable.subscribe( (x:any)=>console.log(x), (error:any)=>logItem(`error: ${error}`), ()=>logItem("complete!") );注意index.ts的位置
运行 npm run startchrome打开 http://localhost:8080/
通过cdn直接部署
上面的方法是属于工程模块化的部署,如果自己乱开一个js,配置path不正确,那么会出现
outside module的错误。单纯想使用rxjs做异步编程的话,直接也可以使用cdn引用配置。
<script src="https://cdn.bootcss.com/rxjs/6.0.0-alpha.3/Rx.min.js"></script>注意:不要使用import,直接使用Rx.来调用
let observable = Rx.Observable.create(observer => { observer.next("Hello world"); observer.next("Hello again"); }); observable.subscribe(x => console.log(x));
总结
reactivex官方网站上的指南,真的是对初次接触RxJS的人非常不友好,没有用过Angular的,按照它的指南来搭建会有一个很大的学习曲线。我费了一个下午才运行起来,希望给大家避坑。未来ES7很可能会加入observable的概念,学习RxJS也算是个小趋势,另外RxJS的使用感是真香啊!