【问题标题】:How can I make typescript compile only needed files?我怎样才能让打字稿只编译需要的文件?
【发布时间】:2019-12-06 07:18:33
【问题描述】:

这是XY problem;回答任何部分都可以。

X:我想从一个源代码树中生成多个包。我知道webpack supporting this,但恐怕我不能使用它。例如,我的路由器由一个或多个映射路由(字符串)到页面(组件)的映射提供。我将这些地图存储在单独的文件中,并根据需要进行注释导入和使用(我为我编写了一个简单的脚本)。

有没有更好的解决方案?

Y: 所以在构建 admin 包时,无法从 index.tsx 访问 user 页面。尽管如此,我还是得到了他们的打字稿错误。即使我创建了一个包含错误的新未使用文件,也会发生同样的情况。

如何避免编译未使用的文件?


我没有像我希望的那样在这里发布我所有的配置文件,在某个地方有一个简单的设置。我会在需要的时候做。单单这个名单就让我郁闷了:

.babelrc
.env
.eslintrc
.gitignore
config-overrides.js
package.json
tsconfig.json
tslint-imports.json

【问题讨论】:

  • 我相当肯定这仅使用 TypeScript 是不可能的,除非您要创建一个新的(临时)目录并将相关文件硬链接到新目录。除此之外,我认为您需要某种构建工具,如您提到的 rollup 或 webpack。
  • hmm 尝试在 tsconfig.json 中使用 excludeinclude 限制输入文件?如果用户页面在您的代码中的任何位置都没有imported(没有模块解析)并且文件通过上述配置设置从编译中排除,则您不应出现编译错误。它需要一些手动操作,正如您所说的那样,您为构建注释了文件导入(如果我理解正确的话)
  • @ford04 是的,这应该可以工作......并且注释行出/入的手动工作已经很容易自动化了。我试试看。

标签: reactjs typescript


【解决方案1】:

这是部分答案,但希望它会带您走向正确的方向。 Typescript 查看 tsconfig.json。假设您的启动来自 npm 脚本,您可以使用 --project 标志指定要使用的 tsconfig,例如 tsc --project tsconfig-1.json

在你的 tsconfig.json 文件中,只包含入口文件,如

include: [
    "src/app/index.ts"
]

如果你有类似"src/**/*" 的东西,那么它将处理所有文件。但是如果您只指定入口文件,那么它将只处理该导入树中的文件。树由import/import() 语句定义。 require 可能会被区别对待,我不确定。

供参考:https://www.typescriptlang.org/docs/handbook/tsconfig-json.html

如果要创建多个包,则需要运行多个 npm 脚本并拥有多个 tsconfig 文件,或者从命令行指定文件。

【讨论】:

  • 我的tsconfig.json 中没有任何include。我会试一试(它很可能会工作)。我已经编写了一个脚本,根据需要注释掉/在某些行中,包括导入,所以 import tree 应该可以完成这项工作。
  • 是的,大概就是这样。引用 tsconfig 文档: > "如果 "files" 和 "include" 都未指定,编译器默认在包含目录和子目录中包含所有 TypeScript(.ts、.d.ts 和 .tsx)文件。 ..
  • 它几乎可以工作,但是使用导入树,我无法让图像工作。我正在使用import logo from './assets/logo.png' 之类的东西,现在显示Cannot find module './assets/logo.png'.ts(2307)This question 可能是相关的,尽管我使用的是 react-dom。
  • @maaartinus 您是否为您的图像声明了环境通配符模块,以便 TypeScript 不会在存在未知扩展名的导入时抱怨?在 .ts src 文件中的某处创建类似 ambient.d.ts 的内容,并在其中写入:declare module '*.png'; 看这里:typescriptlang.org/docs/handbook/…
  • 不,这只是一个例子,语法取决于模块加载器/捆绑器。我认为 Webpack 可以有这些后缀。例如。在我的项目中,我包含 declare module '*.scss'; 以忽略使用 TS 导入的 SCSS 文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
  • 2016-07-26
相关资源
最近更新 更多