tsconfig中的“paths”会被tsc编译和包含吗?如何停止这个过程?

3

想象以下的项目结构

/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

当我想要的是

关于IT技术相关的内容。
/dist
  a.d.ts
  a.js
  index.d.ts
  index.js

即使我在exclude选项中添加"external",它仍然会编译并包含外部包。 有没有办法避免编译外部模块并按原样使用它? 编辑:为了上下文,外部模块是单独编译的。路径仅用于在开发时获取类型。
2个回答

1
默认情况下,TS编译项目目录中的所有文件。您可以排除输入文件,但是如果通过模块解析从../external/*导入某些内容,则无法排除该模块。
发生的情况是:TS看到一个编译源在./src之外(external.ts),并自动将其rootDir配置选项设置为./src./external的父文件夹。这就是为什么您会在./dist中得到额外嵌套的原因。
那么怎么办呢?您可以将external.ts文件重命名为.d.ts扩展名,这样做的好处是a)您仍然拥有类型,b)编译器仅将该文件视为输入,并且不再在./dist中创建嵌套输出。(但我不确定您的单独构建如何运作。)
此外,将外部模块作为单独的npm包设置可能是一个好主意,然后通过npm link或其他机制将其放置在node_modules中。编译器默认不对它们进行编译,因此这也解决了您的问题。

0

你可以这样使用webpack配置

const webpack = require('webpack');

module.exports = {
  externals: {
    '@external': 'external'
  }
};

并使用--extraWebpackConfig webpack.extra.js构建您的应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接