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

时间:2015-12-06 12:03:41

标签: typescript

我目前正在尝试将我的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?

由于

4 个答案:

答案 0 :(得分:14)

是的,有可能。如果rootDir是您申请的根目录,请使用'rootDir': 'app'之类的www

来自typescript compiler options

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

rootDiroutDir一起控制 output 目录结构, not 用于指定编译器 input 。其用法是(docs):

  

对于每个输入文件(即.ts / .tsx文件),它都需要生成匹配的输出(.js / .jsx文件)。要弄清楚生成的输出文件的文件路径,它将从输入中截取“ rootDir”,然后在其前面加上“ outDir”。

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

  

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

如果省略rootDir,则编译器将通过考虑手边的所有输入文件来自动计算合适的目录。因此不一定必须设置它。

sourceRoot

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

希望,这可以使事情澄清一些。