RequireJS и TypeScript name.d.ts - PullRequest
       16

RequireJS и TypeScript name.d.ts

2 голосов
/ 07 июня 2019

Я пытаюсь загрузить остальных клиентов для использования в настраиваемом виджете Dashboard Devops Dashboard. В документации Microsoft показан пример машинописи

import RestClient = require("TFS/WorkItemTracking/RestClient");

// Get an instance of the client
var client = RestClient.getClient();

// Call a method on the client
// e.g. client.getResource(...).then(...);

чтобы загрузить клиент для отдыха. Я попытался последовать этому примеру и поместил ниже пример того, что я считаю рабочим кодом.

Однако, когда страница загружается, я получаю следующие ошибки,

require.js:1961 GET https://localhost:5500/scripts/node_modules/vss-web-extension-sdk/typings/tfs.d.ts/Dashboards/WidgetHelpers.js net::ERR_ABORTED 404 (Not Found)
require.js:1961 GET https://localhost:5500/scripts/node_modules/vss-web-extension-sdk/typings/tfs.d.ts/WorkItemTracking/RestClient.js net::ERR_ABORTED 404 (Not Found)
require.js:1961 GET https://localhost:5500/scripts/node_modules/vss-web-extension-sdk/typings/tfs.d.ts/WorkItemTracking/Contracts.js net::ERR_ABORTED 404 (Not Found)

По какой-то причине RequireJS пытается загрузить файлы javascript для типов, определенных в файле tfs.d.ts.

Мне известно, что можно использовать VSS.require(), но я бы хотел использовать формат, указанный в документации.

Кто-нибудь знает, что мне не хватает или как я могу изменить это, чтобы исправить эту проблему с загрузкой модулей с RequireJS?


Редактировать

Я забыл упомянуть, библиотека, которую я использую, называется VSS Web Extension SDK . Я установил его с помощью команды npm, npm install vss-web-extension-sdk. Причина, по которой я пытаюсь использовать RequireJS с этой библиотекой, заключается в том, что в разделе TypeScript README он указывает на использование модуля AMD.


Требуемый код и файлы конфигурации

test.html

<!DOCTYPE html>
<html>
    <head>
        <script src="node_modules/requirejs/require.js" data-main="scripts/config.js"></script>
    </head>
    <body>
        <div class="widget">
            <h2 class="title"></h2>
        </div>
    </body>
</html>

config.js

requirejs.config({
    paths: {
        "VSS": "node_modules/vss-web-extension-sdk/lib/VSS.SDK.min.js",
        "TFS": "node_modules/vss-web-extension-sdk/typings/tfs.d.ts"
    }
});
require(["HelloWorld"]);

Примечание. Если строка "TFS": "node_modules/vss-web-extension-sdk/typings/tfs.d.ts" отсутствует, отображаются следующие ошибки.

require.js:1961 GET https://localhost:5500/scripts/TFS/Dashboards/WidgetHelpers.js net::ERR_ABORTED 404 (Not Found)
require.js:1961 GET https://localhost:5500/scripts/TFS/WorkItemTracking/RestClient.js net::ERR_ABORTED 404 (Not Found)
require.js:1961 GET https://localhost:5500/scripts/TFS/WorkItemTracking/Contracts.js net::ERR_ABORTED 404 (Not Found)

HelloWorld.ts

VSS.init({                        
    explicitNotifyLoaded: true,
    usePlatformStyles: true
});

import WidgetHelpers = require("TFS/Dashboards/WidgetHelpers");
import RestClient = require("TFS/WorkItemTracking/RestClient");
import { QueryExpand } from "TFS/WorkItemTracking/Contracts";

// Get an instance of the client
var client = RestClient.getClient();
WidgetHelpers.IncludeWidgetStyles();

VSS.register("HelloWorldWidget", function () {                
    return {
        load: function (widgetSettings) {
            var $title = $('h2.title');
            $title.text('Hello World');
            console.log(client.getQueries("Projects", QueryExpand.All));

            return WidgetHelpers.WidgetStatusHelper.Success();
        }
    };
});
VSS.notifyLoadSucceeded();

Скомпилировано HelloWorld.js

define(["require", "exports", "TFS/Dashboards/WidgetHelpers", "TFS/WorkItemTracking/RestClient", "TFS/WorkItemTracking/Contracts"], function (require, exports, WidgetHelpers, RestClient, Contracts_1) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    VSS.init({
        explicitNotifyLoaded: true,
        usePlatformStyles: true
    });
    // Get an instance of the client
    var client = RestClient.getClient();
    WidgetHelpers.IncludeWidgetStyles();
    VSS.register("HelloWorldWidget", function () {
        return {
            load: function (widgetSettings) {
                var $title = $('h2.title');
                $title.text('Hello World');
                console.log(client.getQueries("Projects", Contracts_1.QueryExpand.All));
                return WidgetHelpers.WidgetStatusHelper.Success();
            }
        };
    });
    VSS.notifyLoadSucceeded();
});

tsconfig.json

{
    "compilerOptions": {
        "target": "es6",
        "outDir": "scripts",
        "module": "amd",
        "moduleResolution": "node",
        "types": [
            "vss-web-extension-sdk"
        ]    
    }
}

1 Ответ

0 голосов
/ 19 июня 2019

Как сказал Луи , это можно сделать с помощью VSS.require, чтобы начать все.

Мой код в настоящее время выглядит примерно так.

HTML-файл виджета.

<head>
    <script src="../lib/VSS_Web_Extension/VSS.SDK.min.js"></script>
    <script src="../compiled_ts/WidgetInit.js"></script>
</head>

WidgetInit.js

// Initialize the VSS sdk
VSS.init({
    explicitNotifyLoaded: true,
    usePlatformScripts: true,
    usePlatformStyles: true
});

// Wait for the SDK to be initialized
VSS.ready(function () {
    //All my other code is in Widget.js and runs fine
    VSS.require(["src/compiled_ts/Widget"]);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...