Я пытаюсь использовать Typescript с Webpack (и React) для разработки расширения Azure DevOps для суммирования данных сборки и выпуска.Для разработки расширения требуется пакет vss-web-extension-sdk для взаимодействия с DevOps Azure.
Когда я запускаю команду «webpack», он как-то не может разрешить модули ReleaseManagement (например, «ReleaseManagement»)./ Core / Contracts ") из пакета, в то время как он может правильно разрешать модули сборки (например," TFS / Build / RestClient ").
Модуль не найден: Ошибка: не удается разрешить 'ReleaseManagement /Core / RestClient '
Что я нахожу странным, так это то, что если вместо этого я буду использовать команду "tsc", проблем не будет.
Вот код и конфигурация, которые я сделал.
tsconfig.json
{
"compilerOptions": {
"module": "amd",
"moduleResolution": "node",
"target": "es5",
"outDir": "dist",
"lib": [
"es5",
"es6",
"dom"
],
"importHelpers": true,
"jsx": "react",
"noEmitHelpers": true,
"rootDir": "src/",
"skipLibCheck": true,
"types": [
"vss-web-extension-sdk"
],
"sourceMap": true
},
"include": [
"src/**/*.ts",
"src/**/*.tsx"
]
}
webpack.config.js
const path = require("path");
module.exports = {
context: __dirname,
entry: "./" + path.relative(process.cwd(), path.join(__dirname, "src", "index.tsx")),
output: {
filename: path.relative(process.cwd(), path.join(__dirname, "index.js")),
libraryTarget: "amd",
},
resolve: {
extensions: [".ts", ".tsx", ".js", ".json"]
},
module: {
rules: [
{ test: /\.tsx?$/, loader: "ts-loader" },
{ enforce: "pre", test: /\.js$/, loader: "source-map-loader" }
]
},
externals: [
{
react: true,
"react-dom": true,
},
/^TFS\//,
/^VSS\//,
/^Favorites\//,
]
};
Мой основной файл TSX (тестовый возврат и пустой тег div.)
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { Test } from './Test';
import * as BuildClient from "TFS/Build/RestClient"
import * as RMO_Client from "ReleaseManagement/Core/RestClient";
var rm_client = RMO_Client.getClient();
var build_client =BuildClient.getClient();
ReactDOM.render(<Test />, document.getElementById('extensionFrame'));