我目前正试图将我的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
rootDir
与outDir
一起控制输出目录结构,它不是用于指定编译器输入的。它的用法是(引用):
对于每个输入文件(即.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