Typescript не выдал ничего для '/path/to/file.ts' - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть библиотека, написанная с помощью машинописи. Я могу перенести его, используя tsc и с конфигурацией ниже, без каких-либо проблем.

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "lib": [
      "es6",
      "es5",
      "dom",
      "es2017"
    ],
    "declaration": true,
    "declarationMap": true,
    "sourceMap": true,
    "outDir": "./dist",
    "strict": true,
    "esModuleInterop": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "listEmittedFiles": true
  },
  "exclude": [
    "./dist",
    "./test",
    "./bin"
  ],
  "include": [
    "./lib"
  ]
}

Но когда другой проект пытается использовать эту библиотеку из связанного пакета npm, он не может переносить и связывать, используя webpack и ts-loader. Для всех файлов библиотеки веб-пакет получает ошибку:

Ошибка: машинописный текст не выдан для /library/path/to/file.ts

Примечание: webpack пытается загрузить его из связанного получателя, а не из node_modules, так как он связан с npm .


Конфигурация Webpack проекта использует библиотеку ниже.

module.exports = (entry, dist) => Object.assign({
  entry,
  mode: "production",
  output: {
    filename: "index.js",
    path: dist,
  },
  resolve: {
    extensions: [".js", ".ts"]
  },
  module: {
    rules: [
      {
        test: /\.tsx?$/,
        use: 'ts-loader',
        exclude: /node_modules/
      }
    ]
  },
  stats: 'verbose'
});

tsconfig.json проекта использует библиотеку

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "lib": [
      "es6",
      "es5",
      "dom",
      "es2017"
    ],
    "declaration": true,
    "declarationMap": true,
    "sourceMap": true,
    "outDir": "./dist",
    "strict": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  },
  "exclude": [
    "./dist"
  ],
  "include": [
    "./index.ts"
  ]
}

И пример файла библиотеки, который не выводит вывод:

import {Ctor, Injector} from "./injector";
import {ERROR_CODES, PuzzleError} from "./errors";
import {Route} from "./server";


export interface ApiEvents {}

export interface ApiConfig {
  route: Route;
  subApis?: Array<Ctor<Api>>;
}

interface ApiBase {
}

export function PuzzleApi<T>(config: ApiConfig) {
  return Injector.decorate((constructor: () => void) => {
    console.log(`Registering Api: ${constructor.name}`);

  }, config);
}

export class Api implements ApiBase {
  config: ApiConfig;

  constructor() {
    const config = (this.constructor as any).config as ApiConfig;

    if (!config) {
      throw new PuzzleError(ERROR_CODES.CLASS_IS_NOT_DECORATED, this.constructor.name);
    } else {
      this.config = config;
    }
  }
}

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

1 Ответ

0 голосов
/ 10 сентября 2018

Я могу воспроизвести эту ошибку, если приложение пытается импортировать исходный файл TypeScript из библиотеки (т. Е. Из подкаталога lib). Попробуйте вместо этого импортировать сгенерированный файл JavaScript из подкаталога dist. Если вы действительно хотите перекомпилировать библиотеку как часть приложения, вам, вероятно, нужно добавить ее в список "include" в tsconfig.json приложения.

...