tsconfig.json-仅从文件夹构建ts文件



我目前正试图将我的ts文件构建成一个单独的ts文件。我遇到的问题是,我下面的代码并没有像我想象的那样运行。我使用sourceRoot试图设置它可以从中获取源的唯一位置,但没有成功。我也试过放一个。在目录前面,但它仍然从任何地方拉:(

{
   "compilerOptions": {
       "target": "ES5",
       "noImplicitAny": true,
       "removeComments": true,
       "preserveConstEnums": true,
       "out": "www/js/app.js",
       "sourceMap": true,
       "sourceRoot": "www/app"
   }
}

所有文件,包括那些不在www/app内部构建的文件:(

现在我已经回到手动指定文件:

{
    "compilerOptions": {
        "target": "ES5",
        "noImplicitAny": true,
        "removeComments": true,
        "preserveConstEnums": true,
        "out": "www/js/app.js",
        "sourceMap": true
    },
    "files": [
        "./www/app/app.ts",
        "./www/app/menu/menuController.ts",
        "./www/app/playlists/playlistsController.ts"
    ]
}

是否可以将源目录限制为只有www/app?

感谢

是的,这是可能的。如果www是应用程序的根目录,请像使用'rootDir': 'app'一样使用rootDir

来自typescript编译器选项的rootDir描述:

指定输入文件的根目录。

我知道这个问题有点老。但是这里提到的一些TypeScript编译器选项并不一定有助于解决这个问题。对于搜索rootDir或类似内容的人(如我),澄清上述选项和解决方案相关选项可能会有所帮助。

将所有文件发射到一个文件中

✅使用outFile

❌不要使用out(已弃用)

背景:

如果要生成到目标目录,请选择outDir。有关更多信息,请参阅编译器选项。

仅从特定目录发出文件

✅在tsconfig 中使用files/include/exclude

❌不使用rootDir

解释:

编译器通过查找所有输入文件

  • 查看file/include/exclude属性
  • 以下import语句
  • 关注///<reference .. />(应该不再那么重要了)

如果没有指定这些选项,那么TypeScript项目根目录(由tsconfig.json提供)中的所有文件都将包含在内。无论file/include/exclude如何,编译器都会自动包含import ed模块。请查看它们的常见问题解答。所有输入文件组合在一起就是它将要构建的文件的信封。如何配置file/include/exclude,请参阅tsconfig.json文档,也可以考虑@TSV的答案。

rootDir

rootDiroutDir一起控制输出目录结构,它不是用于指定编译器输入。它的用法是(引用):

对于每个输入文件(即.ts/.tsx文件),它需要生成一个匹配的输出(.js/.jsx文件)。为了找出生成的输出文件的文件路径,它将从输入中截取"rootDir",然后将"outDir"预先写入其中。

因此,rootDir需要一个目录,其中包括来自上面的所有输入源,否则您将获得

错误TS6059:文件不在"rootDir"..下rootDir"应包含所有源文件

如果省略了rootDir,编译器会通过考虑手头的所有输入文件来自动计算合适的目录。所以它不一定要设置。

sourceRoot

此选项仅与源映射/调试相关,在问题范围内可以省略。当您的源文件在运行时与设计时位于不同的位置时,就会使用它。编译器将调整源映射文件中源的路径,以匹配运行时的路径(编译器选项)。

希望,这能澄清一些事情。

根据tsconfig模式:

"如果tsconfig.json中没有‘files’属性,编译器默认情况下,包括包含目录中的所有文件子目录。当指定了"files"属性时,只有那些文件包括在内。"

"如果tsconfig.json中不存在'files'属性,而是存在"exclude"属性,编译器将排除文件和"exclude"属性中指定的文件夹。"

根据描述:

"files"属性不能与"exclude"一起使用所有物如果同时指定了两者,则"files"属性将优先

"在tsconfig.json文件属性中支持globs(或仅排除文件/目录)"问题反映了当前情况。

rootDir只是用于控制输出目录结构。

输出目录结构将类似于rootDir的目录。U可以使用glob-like file patterns来限制源目录:

* matches zero or more characters (excluding directory separators)
? matches any one character (excluding directory separators)
**/ recursively matches any subdirectory

最新更新