Связанный API компилятора Typescript - PullRequest
0 голосов
/ 30 октября 2019

Я использую 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...>
...