Webpack ts-loader编译所有文件,而我只想让它在一个文件夹/文件中运行

24
我发现我的应用程序结构和WebPack、TypeScript以及TS-Loader的构建过程存在问题,我原以为是由于TypeScript 2.1.4引起的,但实际上一直存在。
可以从我的其他帖子中查看所有细节: TypeScript 2.1.4 breaking changes in webpack ts-loader 简而言之,我将Gulp和WebPack设置为入口点/client/app.ts,目前几乎没有内容(当然没有引用/server/),但是WebPack构建过程的TypeScript编译阶段仍在尝试在/server上运行(并且在我的另一篇帖子中,显示了来自Server文件夹的编译错误,而实际上应该只在Client文件夹上运行)。
我做错了什么?如何才能修复它,使其仅对/client/.ts文件进行处理,并特别地沿着app.ts的结构走?
这是我的repo展示到目前为止我正在使用的一切内容: https://github.com/CmdrShepardsPie/test-ts-app/tree/develop 谢谢。

看了你的另一个问题 - 我建议从你的项目中完全移除gulp。它似乎没有给你带来任何好处,只会让构建流程更加混乱。 - Andy Ray
我正在使用Gulp编译服务器,我会在我的问题中添加一个链接到repo以供完整参考。 - user358089
@ChrisSimpson,你解决了这个问题吗?我也遇到了完全相同的情况,我本来以为TS文件不会全部编译,但显然这是因为TypeScript编译器这样做了(参见:https://github.com/s-panferov/awesome-typescript-loader/issues/359,这引用了awesome-typescript-compiler,但概念是相同的)... - Dave Goodchild
我有点晚了,但我刚刚遇到了与“ts-loader”和“awesome-typescript-loader”完全相同的问题。解决方案(可能有点不太优雅,但很容易)是在任何地方创建一个空的.ts文件,并将其指定为“tsconfig.json”中的“input”。这样,每次调用tsc时,它都会处理来自webpack加载器和此空文件的文件,但它会让其他文件保持原样。 - user4520
对我帮助很大的是将我的单体库设置切换为使用TypeScript项目引用,如此处所述。花了一些功夫来设置它,但现在所有东西都可以顺畅地协同工作了。 - Venryx
显示剩余4条评论
1个回答

51

您可以通过在webpack.config.js中指定选项onlyCompileBundledFiles来解决此错误。

module: {
    rules: [
        {
            test: /\.tsx?/,
            use: [{loader: 'ts-loader', options: {onlyCompileBundledFiles: true}}],
        }
    ],
},

我仍然觉得 ts-loader 在默认情况下存在问题是令人惊讶的,但至少有一种解决方法。


4
这是答案。谢谢。 - pwray
1
谢谢,这解决了我遇到的一个问题。我的整个Express应用程序(使用TypeScript构建)被包含在我的公共目录中(Webpack编译到其中),而不仅仅是我的输出捆绑包。 - tomhughes
4
更新一下,现在是2020年,但 ts-loader 仍然表现出这种愚蠢的行为。它为什么会自动编译所有 ts 文件,我不知道,但显然我们生活在这样的世界中。疯狂啊。 - dudewad
1
感谢@dudewad在2020年确认-我也要卸载所有内容以找到此错误。 - Cameron
令人惊讶的是,这个问题三年后仍然存在。 - Chris Hawkes
请记住,这会破坏与全局 .d.ts 文件或其他类型定义的兼容性,这些文件不是您导入的文件的一部分。 - Guido Bouman

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