我目前正在尝试将我的ts文件构建为单个ts文件。我得到的问题是我的代码不符合我的想法。我使用sourceRoot尝试设置它可以从中获取源的唯一位置,但这不起作用。我也尝试过放一个。在目录的前面,但它仍然从任何地方拉出来:(
{
"compilerOptions": {
"target": "ES5",
"noImplicitAny": true,
"removeComments": true,
"preserveConstEnums": true,
"out": "www/js/app.js",
"sourceMap": true,
"sourceRoot": "www/app"
}
}
所有文件,包括不在www / app build内的文件:(
现在我已经回到手动指定文件:
{
"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?
由于
答案 0 :(得分:14)
是的,有可能。如果rootDir
是您申请的根目录,请使用'rootDir': 'app'
之类的www
。
rootDir
说明:
指定输入文件的根目录。
答案 1 :(得分:8)
根据tsconfig schema:
"如果没有'文件'属性存在于编译器tsconfig.json中 默认包含包含目录的所有文件 子目录。当一个'文件'指定属性,仅指定那些文件 包括在内。"
"如果没有'文件'属性存在于tsconfig.json中,但是 '排除'属性存在,编译器将排除文件和 '排除'中指定的文件夹。属性"
根据description:
"文件"财产不能与"排除" 属性。如果两者都被指定,那么"文件"财产需要 优先级。
issue 'support globs in tsconfig.json files property (or just file/directory exclusions)'反映了当前的情况。
答案 2 :(得分:2)
rootDir
仅用于控制输出目录结构。
输出目录结构与您的rootDir
目录类似。
您可以使用glob-like file patterns
来限制源目录:
* matches zero or more characters (excluding directory separators)
? matches any one character (excluding directory separators)
**/ recursively matches any subdirectory
答案 3 :(得分:2)
我知道,这个问题有点老了。但是,这里提到的某些TypeScript编译器选项不一定有助于解决该问题。对于搜寻rootDir
或类似的人(例如我),弄清所提到的和与解决方案有关的选项可能会有所帮助。
✅使用outFile
❌不要使用out
(已弃用)
背景:
如果要构建到目标目录,请选择outDir
。有关更多信息,请参见compiler options。
✅在tsconfig中使用files
/ include
/ exclude
❌不要使用rootDir
说明:
编译器通过
查找所有输入文件。file
/ include
/ exclude
属性import
条语句///<reference .. />
之后(已经没有多大关系了)如果未指定这些选项,则将包含TypeScript项目根目录(由tsconfig.json提供)中的所有文件。无论import
/ file
/ include
为何,exclude
版的模块都是由编译器自动包含的。看看它们的{{3 }}。所有合并的输入文件都是将要构建的文件的信封。如何配置file
/ include
/ exclude
,请参阅tsconfig.json FAQ,并考虑@TSV的答案。
rootDir
与outDir
一起控制 output 目录结构, not 用于指定编译器 input 。其用法是(docs):
对于每个输入文件(即.ts / .tsx文件),它都需要生成匹配的输出(.js / .jsx文件)。要弄清楚生成的输出文件的文件路径,它将从输入中截取“ rootDir”,然后在其前面加上“ outDir”。
因此,rootDir
需要一个包含上面所有输入源的目录,否则您将获得
错误TS6059:文件不在'rootDir'下。.'rootDir'应该包含所有源文件
如果省略rootDir
,则编译器将通过考虑手边的所有输入文件来自动计算合适的目录。因此不一定必须设置它。
此选项仅与sourcemaps / debugging相关,对于问题范围可以忽略。当源文件在运行时与设计时位于不同位置时,将使用此选项。编译器将调整源映射文件中源的路径,以在运行时(quote)匹配路径。
希望,这可以使事情澄清一些。