Я использую typcript-json-schema для проверки интерфейсов во время выполнения. Из-за некоторых других зависимостей мне необходимо в конечном итоге связать свой код с помощью веб-пакета, после связывания код больше не работает и не удается найти типы машинописи.
После некоторого исследования я решил, что проблема связанак API компилятора машинописи. Без связывания кода, приведенного ниже, выводятся все файлы типов, найденные в node_modules, включая машинописные, после связывания он находит все, кроме машинописных.
import * as ts from "typescript";
export async function main() {
const p = ts.createProgram({
rootNames: ["src/dummy.ts"], options: {}
});
p.getSourceFiles().forEach(s => console.log(s.fileName));
console.log(p.getSourceFiles().length);
}
Я что-то пропустил или связывание машинописного текста не поддерживается?
webpack.config.js
const path = require('path');
const mode = process.env.NODE_ENV == "development" ? "development" : "production";
module.exports = {
mode,
entry: "./src/app.ts",
target: "node",
devtool: mode === "development" ? "source-map" : undefined,
node: {
global: true
},
output: {
path: path.resolve(__dirname, "bin"),
filename: "bundle.js",
libraryExport: 'default'
},
resolve: {
extensions: [".ts", ".js"]
},
module: {
rules: [
{
loader: "ts-loader",
test: /\.tsx?$/
}
]
}
};
tsconfig.json
{
"compilerOptions": {
"moduleResolution": "node",
"module": "commonjs",
"target": "ES6",
"declaration": true,
"outDir": "bin",
"resolveJsonModule": true,
"sourceMap": true
},
"include": [
"src/**/*"
],
"exclude": [
"bin/**/*.ts",
"build/*.ts",
"**/node_modules/**"
]
}
Редактировать: Добавление вывода
До Webpack
project/node_modules/typescript/lib/lib.d.ts
project/node_modules/typescript/lib/lib.es5.d.ts
project/node_modules/typescript/lib/lib.es2015.d.ts
<ommitted...>
src/dummy.ts
project/node_modules/@types/json-schema/index.d.ts
project/node_modules/@types/node/globals.d.ts
project/node_modules/@types/node/assert.d.ts
project/node_modules/@types/node/async_hooks.d.ts
project/node_modules/@types/node/buffer.d.ts
<ommitted...>
После Webpack
src/dummy.ts
project/node_modules/@types/json-schema/index.d.ts
project/node_modules/@types/node/globals.d.ts
project/node_modules/@types/node/assert.d.ts
project/node_modules/@types/node/async_hooks.d.ts
project/node_modules/@types/node/buffer.d.ts
<ommitted...>