在带有 SystemJS 的项目中使用 microsoft-graph-client

Use microsoft-graph-client in project with SystemJS

目前我正在尝试让 ng2-adal 在我的项目中工作,但我 运行 进入

幸运的是我得到了Fei Xue, but it still hangs. By trying to reproduce the problem I published a sample project on GitHub, but Fei had problems in the first run to get it to work and he provided a working sample from his side的答复。我克隆了 repo 并进行了尝试,在删除了 e2e 测试并将 rx.js 更新到版本 5.4.2 后它起作用了。

然后我尝试将 microsoft-graph-client 添加到项目中。 Fei 已经将它添加到 package.json,所以我只需要使用它...

在文件 microsoftGraph.component.ts 中,我导入了客户端并尝试通过以下代码调用来使用它:

   if (this.isLoggedIn) {
        this.adalService.acquireToken('https://graph.microsoft.com').subscribe((token) => {
            console.log(token);

            this.graphClient = Client.init({
                debugLogging: true,
                authProvider: (done) => {
                    done(undefined, token);
                }
            });
        });
    }

插入该代码并构建项目后,我在浏览器控制台中收到一条错误消息(不是来自编译器):

GET http://localhost:3000/@microsoft/microsoft-graph-client 404 (Not Found)

所以我开始在项目中配置 systemjs.config.js 文件并添加地图和包配置:

map: {
    ...
    '@microsoft/microsoft-graph-client': 'npm:@microsoft/microsoft-graph-client/lib/src',
    ...
},
packages: {
    ...
    '@microsoft/microsoft-graph-client': {
        main: 'index.js',
        defaultExtension: 'js'
    }
    ...
}

构建并重新加载后,我收到了一些错误消息,抱怨缺少 es6-promise 和 superagent:

GET http://localhost:3000/es6-promise 404 (Not Found)
GET http://localhost:3000/superagent 404 (Not Found)

所以我相应地添加了 but 包,就像我在上面添加了图形客户端一样。但这不会导致大量丢失的包(例如 formidable、form-data、url、stream、mime、util、zlib、...)。

如果我继续添加所有这些包,我想我会在这些包中的每一个都声明的所有 npm 依赖项的道路上得到更多丢失的包。

结论

我做错了,还有另一种方法可以配置 system.js 自动制作所有这些东西,而不是手动制作。但是怎么办?请给我一些关于如何正确配置 system.js 以使用 microsoft-graph-client 的见解。

我能够重现您的错误,但也不太明白为什么。我检查了 @microsoft/microsoft-graph-client 并看到它们具有与其尝试加载的库匹配的依赖项列表。那么看看有没有高手解答一下。

  "dependencies": {
    "es6-promise": "^4.1.0",
    "superagent": "^3.5.2"
  }

我们可以让它工作的一种肮脏的方法是引用 index.html 上的 js 文件。并在我们需要使用绕过TypeScript检查时在组件上添加declare var MicrosoftGraph: any。我想你已经知道了。之后只需参考 Javascript api 的用法,如 MicrosoftGraph.Client.xxx

<script type="text/javascript" src="node_modules/@microsoft/microsoft-graph-client/libgraph-js-sdk-web.js"></script>

AFAIK,这是使用 SystemJS 加载 microsoft-graph-client SDK 的已知问题(参考 here)。

为了调用 Microsoft Graph,我遵循代码示例(msgraph-typescript-typings) using superagent

这是 microsoftGraph.component.ts 的更改代码:

import { Component, Inject, OnInit } from '@angular/core';

import { AuthHttp, AuthConfig, AUTH_PROVIDERS, provideAuth } from 'angular2-jwt/angular2-jwt';

import * as MicrosoftGraph from "@microsoft/microsoft-graph-types"

import * as request from 'superagent';

import { AdalService } from 'ng2-adal/services/adal.service';
import {SecretService} from '../services/secret.service';

@Component({
    selector: 'MicrosoftGraph',
    template: `<button (click)="getProfile()">Get profile using Microsoft Graph</button>`
})
export class MicrosoftGraphComponent {

    private userProfile: any;

    constructor(
        private adalService: AdalService,
        private secretService: SecretService,
        private http1: AuthHttp) {
        adalService.init(secretService.adalConfig);

        }


   public getProfile(){
       this.adalService.acquireToken("https://graph.microsoft.com").subscribe(function(token){
        console.log(token)

        request
            .get("https://graph.microsoft.com/v1.0/me")
            .set('Authorization', 'Bearer ' + token)
            .end((err:any, res:any) => {
                if (err) {
                    console.error(err)
                    return;
                }
                let user:[MicrosoftGraph.User] = res.body;
                  console.log(user);

            })
       })
  }

}