使用最新版本的Angular RC4,Rxjs可用于node_modules或npmcdn.com目录.
.umd.jshttp://plnkr.co/edit/B33LOW?f=systemjs.config.js&p=preview
当然,这个设置会使很多单独的RxJS文件下载,因为它是在单独读取文件,而不是 .umd.js
GET https://npmcdn.com/rxjs@5.0.0-beta.6/bundles/Subject 404 ()
GET https://npmcdn.com/rxjs@5.0.0-beta.6/bundles/Observable 404 ()
GET https://npmcdn.com/rxjs@5.0.0-beta.6/bundles/observable/PromiseObservable 404 ()
...
Run Code Online (Sandbox Code Playgroud)
尝试使用失败的plunker .umd.js,和system.config.js
http://plnkr.co/edit/rVUNyz?p=preview&f=systemjs.config.js
systemjs.config.js
var map = {
'app': 'app',
'@angular': 'https://npmcdn.com/@angular', // sufficient if we didn't pin the version
'@angular/router': 'https://npmcdn.com/@angular/router' + routerVer,
'@angular/forms': 'https://npmcdn.com/@angular/forms' + formsVer,
'@angular/router-deprecated': 'https://npmcdn.com/@angular/router-deprecated' + routerDeprecatedVer,
'angular2-in-memory-web-api': 'https://npmcdn.com/angular2-in-memory-web-api', // get latest
'rxjs': 'https://npmcdn.com/rxjs@5.0.0-beta.6/bundles',
'ts': 'https://npmcdn.com/plugin-typescript@4.0.10/lib/plugin.js',
'typescript': 'https://npmcdn.com/typescript@1.9.0-dev.20160409/lib/typescript.js',
};
//packages tells the System loader how to load when no filename and/or no extension
var packages = {
'app': { main: 'main.ts', defaultExtension: 'ts' },
'rxjs': { main: 'Rx.umd.js', defaultExtension: 'js' },
'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' },
};
Run Code Online (Sandbox Code Playgroud)
似乎'rxjs'根本没有使用'package'部分.
我认为使用rxjsin packages部分没有任何区别.
只有使这个plunker工作,我必须将地图部分更改为以下没有 bundles
'rxjs': 'https://npmcdn.com/rxjs@5.0.0-beta.6',
Run Code Online (Sandbox Code Playgroud)
我的问题是'有没有办法在Angular2应用程序中使用Rx.umd.js?'
我查看了 Rx.umd.js 文件,似乎整个包都使用相对路径导入。这意味着当 rxjs 包的基础(在地图中)具有 /bundle 后缀时,它无法找到文件。
这是有道理的,因为您使用的是实际的 rxjs 包而不是它的“/bundles”目录。
因此,您所要做的就是:
在 systemjs.config.js 的地图部分中更改
'rxjs': 'https://npmcdn.com/rxjs@5.0.0-beta.6/bundles',
Run Code Online (Sandbox Code Playgroud)
到
'rxjs': 'https://npmcdn.com/rxjs@5.0.0-beta.6',
Run Code Online (Sandbox Code Playgroud)在包部分,更改
'rxjs': { main: 'Rx.umd.js', defaultExtension: 'js' },
Run Code Online (Sandbox Code Playgroud)
到
'rxjs': { main: 'bundles/Rx.umd.js', defaultExtension: 'js' },
Run Code Online (Sandbox Code Playgroud)或者简单地说, /bundles 应该是 pacakge 定义的一部分,而不是映射的一部分,因为映射应该指向包的根目录。
这是一个更新的(工作!)plunker,需要进行一些小的更改:http://plnkr.co/edit/3P6tLYMYOC24zc6JCkgO ?f=systemjs.config.js&p=preview
--- 编辑(遵循@allenhwkim 评论)---
我进一步研究了它。请注意,systemjs.config.js 位于包(而不是映射)部分内的bundles/xxx 后面。例如,参见第 59 行。
我的猜测是 Angular 有自己对 rxjs 的引用,并且它正确定义了包,因此看起来您的包定义被忽略了。
为了证明该包是相关的并已使用,我(在 plnkr 中)添加了一个名为 rxjs1 的虚拟包,并尝试将其导入 inedex.html 文件中。现在运行 plnkr 并查看它已导入。尝试将包定义更改为不存在的内容,例如 Rxx.umd.js,您将收到错误。当您使用时,包 def 似乎是相关的
System.import('package-name');
Run Code Online (Sandbox Code Playgroud)
并不是
import { someClass } from 'package-name';
Run Code Online (Sandbox Code Playgroud)
请注意,当您使用 plnkr 时,plnkr 并不总是跟踪对包定义的更改,您需要刷新页面。
| 归档时间: |
|
| 查看次数: |
794 次 |
| 最近记录: |