打字稿没有输出'/path/to/file.ts'

时间:2018-09-09 12:30:33

标签: typescript webpack ts-loader

我有一个用打字稿写的图书馆。我可以使用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软件包中的该库时,它无法使用webpackts-loader进行转换和捆绑。对于库webpack的所有文件都会出错:

  

错误:打字稿没有输出/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 :(得分:1)

如果应用程序尝试从库(即,从lib子目录中)导入TypeScript源文件,我可以重现此错误。尝试改为从dist子目录导入生成的JavaScript文件。如果您真的想重新编译该库作为应用程序的一部分,则可能需要将其添加到应用程序"include"的{​​{1}}列表中。