[英]tsconfig "paths" are compiled and included by tsc? How can you stop this?
想象一下下面的项目结构
/src
index.ts
a.ts
/external
external.ts
使用以下tsconfig.json
:
{
"compilerOptions": {
"outDir": "dist",
"declarationDir": "dist",
"declaration": true,
"baseUrl": "./src",
"paths": {
"@external/*": "../external/*"
}
},
"exclude": [
"dist"
]
}
输出将包含外部包
/dist
/src
a.d.ts
a.js
index.d.ts
index.js
/external
external.d.ts
external.js
当我想要的是
/dist
a.d.ts
a.js
index.d.ts
index.js
即使我在exclude
选项中添加"external"
,它仍然会编译并包含外部包。
有没有办法避免编译外部模块并按原样使用它?
编辑:对于上下文,外部模块是单独编译的。 该路径仅用于在开发时获取类型。
TS 默认编译项目目录中的所有文件。 您可以exclude
输入文件,但如果您通过模块解析从../external/*
import
某些../external/*
,则无法排除该模块。
发生的事情是:TS 看到,一个编译源在./src
( external.ts
) 之外,并自动将其rootDir
配置选项设置为./src
和./external
的父文件夹。 这就是为什么您在./dist
获得额外嵌套的./dist
。
那么该怎么办? 您可以将external.ts
文件重命名为.d.ts
扩展名,因此 a) 您仍然拥有类型,b) 编译器只会将该文件视为输入,并且不再在./dist
创建嵌套输出。 (但我不确定,你的单独构建是如何工作的。)
此外,将外部模块设置为单独的 npm 包可能是个好主意,然后您将通过npm link
或其他机制将其放置在node_modules
。 默认情况下,编译器不会编译它们,因此它也可以解决您的问题。
你可以像这样使用 webpack 配置
const webpack = require('webpack');
module.exports = {
externals: {
'@external': 'external'
}
};
并使用--extraWebpackConfig webpack.extra.js
构建您的应用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.