Typescript 没有发出 '/path/to/file.ts' 的输出
Typescript emitted no output for '/path/to/file.ts'
我有一个用 typescript 编写的库。我可以使用 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
进行转译和捆绑。对于库的所有文件,webpack 都会出现错误:
Error: Typescript emitted no output for /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;
}
}
}
我找不到它不为该项目发出输出的任何原因。我可以毫无问题地编译库。有人可以帮我解决这个问题吗?
如果应用程序尝试从库(即从 lib
子目录)导入 TypeScript 源文件,我可以重现此错误。尝试从 dist
子目录导入生成的 JavaScript 文件。如果您真的想将库重新编译为应用程序的一部分,您可能需要将其添加到应用程序 tsconfig.json
中的 "include"
列表中。
我有一个用 typescript 编写的库。我可以使用 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
进行转译和捆绑。对于库的所有文件,webpack 都会出现错误:
Error: Typescript emitted no output for /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;
}
}
}
我找不到它不为该项目发出输出的任何原因。我可以毫无问题地编译库。有人可以帮我解决这个问题吗?
如果应用程序尝试从库(即从 lib
子目录)导入 TypeScript 源文件,我可以重现此错误。尝试从 dist
子目录导入生成的 JavaScript 文件。如果您真的想将库重新编译为应用程序的一部分,您可能需要将其添加到应用程序 tsconfig.json
中的 "include"
列表中。