Angular 10 DevOps 扩展 Rest Api

Angular10 DevOps Extension RestApi

我发现这非常有用 github project,这是使 angular 在 Azure DevOps 扩展中工作的概念证明。一切正常,直到我想使用 rest api 中的构建,例如“VSS/Service”或“TFS/VersionControl/GitRestClient”。 我发现当我从 tsconfig.app.json 添加到包含时,我的 visual studio codium ide 识别我的组件中的类型 import { VssService } from 'VSS/Service'; 但是当我尝试构建文件时ng build 出现以下错误:

Module not found: Error: Can't resolve 'VSS/Service'

我尝试将 angular.json scripts[] 添加到 VSS.SDK.min.js 文件,但没有任何改变。

我看到 init-vss-angular.js VSS 已初始化,但我不知道 ide如何在我的 angular 应用程序中使用其余服务

regads

我可能错了,但我猜你的导入不是必需的。 作者正在使用来自 core-services/devops-proxy/servicesDevopsProxyService。查看 app.component.ts 文件,他使用 Angular DI 提供 DevopsProxyService.

ng build 在我这边工作正常:)

所以来自有用的 github wrote back to me and said he has another project 的人使用了 REST 服务。 以下是使用 angular 和打字稿在 DevOps 扩展中使用 DevOps RestServices 的简单解决方案。

vss-extension.json 在“文件”部分添加:

{
  "path": "node_modules/vss-web-extension-sdk/lib",
  "addressable": true,
  "packagePath": "lib"
},

在您的 extension.html 文件的 header 中包含:

  <script src="init-vss-angular.js"></script>
  <script>
    initialize();
  </script>

init-vss-angular.js:

function initialize(explicitNotifyLoaded, usePlatformStyles, usePlatformScripts, afterSdkReadyCallback) {
    appendScript('../lib/VSS.SDK.min.js').onload = function () {
        VSS.init({
            explicitNotifyLoaded: explicitNotifyLoaded || false,
            usePlatformStyles: usePlatformStyles || false,
            usePlatformScripts: usePlatformScripts || false
        });
    };

    function appendScript(scriptSource) {
        let scriptTag = document.createElement('script');
        scriptTag.src = scriptSource;
        document.head.appendChild(scriptTag);
        return scriptTag;
    }
};

在我的例子中,我想从 RestService 中检索所有的存储库,并且有一个神奇的方法可以回答我的问题。

http-client-factory.service.ts:

/// <reference path="../../../node_modules/vss-web-extension-sdk/typings/tfs.d.ts" />.
/// <reference path="../../../node_modules/vss-web-extension-sdk/typings/VSS.SDK.d.ts" />.

import { Injectable } from '@angular/core';
import { GitHttpClient } from 'TFS/VersionControl/GitRestClient';

@Injectable({
  providedIn: 'root'
})
export class HttpClientFactoryService {
  public retrieveGitHTTPClient(): Promise<GitHttpClient> {
    return new Promise((resolve: any, _: any) => {
      VSS.require(['TFS/VersionControl/GitRestClient'], (wit: any) => {
        const client = <GitHttpClient>wit.getClient();
        return resolve(client);
      });
    });
  }
}

并最终使用 http-repository.service.ts

获取存储库
/// <reference path="../../../node_modules/vss-web-extension-sdk/typings/tfs.d.ts" />.
/// <reference path="../../../node_modules/vss-web-extension-sdk/typings/VSS.SDK.d.ts" />.

import { Injectable } from '@angular/core';
import { HttpClientFactoryService } from './http-client-factory.service';
import { GitRepository } from 'TFS/VersionControl/Contracts';

@Injectable({
  providedIn: 'root'
})
export class HttpRepositoryService {
  public constructor(
    private httpClientFactory: HttpClientFactoryService) {
  }

  public async loadRepositories(): Promise<GitRepository[]> {
    const client = await this.httpClientFactory.retrieveGitHTTPClient();
    return client.getRepositories();
  }
}

感谢DrMueller提供原码