gpt4 book ai didi

Angular2,systemjs,无法使用 Rx.umd.js

转载 作者:太空狗 更新时间:2023-10-29 17:40:55 25 4
gpt4 key购买 nike

在最新版本的 Angular RC4 中,Rxjs 可以在 node_modulesnpmcdn.com 目录中使用。

成功的plunker但没有使用.umd.js

http://plnkr.co/edit/B33LOW?f=systemjs.config.js&p=preview

这是下载单个文件的“网络”选项卡屏幕截图。 enter image description here

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

但是,与其他 AngularJS 文件一样,当我尝试使用单个 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 ()
...

enter image description here

plunker 尝试使用 .umd.jssystem.config.js 失败

http://plnkr.co/edit/rVUNyz?p=preview&f=systemjs.config.js

系统js.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”部分。我看不出在包部分使用 rxjs 有什么区别。

为了让这个 plunker 工作,我必须将 map 部分更改为以下没有 bundles

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

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

最佳答案

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

这是有道理的,因为您使用的是实际的 rxjs 包,而不是它的“/bundles”目录。

因此,您所要做的就是:

  1. 在 systemjs.config.js 的 map 部分更改

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

    'rxjs':                       'https://npmcdn.com/rxjs@5.0.0-beta.6',
  2. 在包部分,更改

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

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

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

这是一个更新的(工作!)插件,需要进行一些小的更改: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');

不是

import { someClass } from 'package-name';

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

关于Angular2,systemjs,无法使用 Rx.umd.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38793349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com