繁体   English   中英

tsconfig“路径”是由 tsc 编译和包含的吗? 你怎么能阻止这个?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM