Angular2,systemjs,未能使用Rx.umd.js

Angular2,systemjs,未能使用Rx.umd.js,angular,rxjs,umd,Angular,Rxjs,Umd,在Angular RC4的最新版本中,Rxjs可与node_模块或npmcdn.com目录一起使用 已成功插入,但未使用.umd.js 这是下载单个文件的网络选项卡屏幕截图。 当然,这个设置会下载很多单独的RxJS文件,因为它是单独读取文件的,而不是.umd.js 但是,与其他AngularJS文件一样,当我尝试使用单个umd.js文件时,会发生以下错误。 plunker尝试使用.umd.js和system.config.js systemjs.config.js var map

在Angular RC4的最新版本中,Rxjs可与
node_模块
npmcdn.com
目录一起使用

已成功插入,但未使用
.umd.js

这是下载单个文件的网络选项卡屏幕截图。

当然,这个设置会下载很多单独的RxJS文件,因为它是单独读取文件的,而不是
.umd.js

但是,与其他AngularJS文件一样,当我尝试使用单个umd.js文件时,会发生以下错误。

plunker尝试使用
.umd.js
system.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' },
  };
似乎“rxjs”根本没有使用“package”部分。 我看不出在packages部分使用
rxjs
有什么区别

为了使这个plunker工作,我必须将map部分更改为以下内容,而不使用
bundles

  'rxjs':                       'https://npmcdn.com/rxjs@5.0.0-beta.6',

我的问题是“有没有办法在Angular2应用程序中使用Rx.umd.js?”

我查看了Rx.umd.js文件,似乎整个包都使用了相对路径导入。这意味着当rxjs包(在映射中)的底部具有/bundle后缀时,它无法找到文件

这很有意义,因为您使用的是实际的rxjs包,而不是它的“/bundles”目录

因此,您所要做的就是:

  • 在systemjs.config.js的map部分中更改

    'rxjs':                       'https://npmcdn.com/rxjs@5.0.0-beta.6/bundles',
    

  • 在packages部分中,更改

    'rxjs':                       { main: 'Rx.umd.js', defaultExtension: 'js' },
    

  • 或者简单地说,/bundle应该是包定义的一部分,而不是映射,因为映射应该指向包的根

    这是一个更新(工作!)的plunker,需要做一些小改动:

    ---编辑(在@allenhwkim评论之后)---

    我进一步调查了一下。请注意,systemjs.config.js遵循包(而不是映射)部分中的bundles/xxx。例如,见第59行

    我的猜测是angular有它自己对rxjs的引用,它正确地定义了包,所以看起来您的包定义被忽略了

    为了证明这个包是相关的,并且被使用,我(在plnkr中)添加了一个名为rxjs1的虚拟包,并尝试将它导入到inedex.html文件中。现在运行plnkr并查看其导入。尝试将包定义更改为不存在的内容,例如Rxx.umd.js,您将得到一个错误。当您使用时,软件包def似乎是相关的

    System.import('package-name');
    
    而不是

    import { someClass } from 'package-name';
    

    请注意,当您使用plnkr时,plnkr并不总是跟踪对包定义的更改,您需要刷新页面。

    感谢并对您的答案进行了投票,但它甚至没有读取Rx.umd.js。没有包/rxjs,plnker仍然可以工作。我认为rxjs根本不使用
    包/rxjs
    。您得到解决方案了吗?
    'rxjs':                       { main: 'bundles/Rx.umd.js', defaultExtension: 'js' },
    
    System.import('package-name');
    
    import { someClass } from 'package-name';