Skip to content

Cannot build when composite: true in tsconfig.json #112

Closed
@hassankhan

Description

@hassankhan

What happens and why it is wrong

This bug is occurring in a monorepo project managed with Yarn Workspaces. I've recently upgraded it to TypeScript 3 and was looking to take advantage of Project References. To do this, I set composite: true under compilerOptions in tsconfig.json for each subpackage. If I set it to false, then everything works fine.

Interestingly, builds using tsc work fine, only when using Rollup does this issue occur.

Environment

  • macOS: 10.13.6
  • node: 8.11.1
  • typescript: 3.0.1

Versions

  • typescript: 3.0.1
  • rollup: 0.65.0
  • rollup-plugin-typescript2: 0.17.0

rollup.config.js

I use a script to generate a Rollup configuration, the results of which are below:

Generated Rollup Config
{
  "external": [],
  "plugins": [
    {
      "name": "json"
    },
    {
      "name": "rpt2"
    },
    {
      "name": "commonjs"
    },
    {
      "name": "node-resolve"
    },
    {
      "name": "sourcemaps"
    }
  ],
  "watch": {
    "include": "src/**"
  },
  "input": "src/index.ts",
  "output": [
    {
      "file": "dist/lambda.umd.js",
      "name": "lambda",
      "format": "umd",
      "sourcemap": true
    },
    {
      "file": "dist/lambda.es5.js",
      "format": "es",
      "sourcemap": true
    }
  ]
}

tsconfig.json

Root
{
  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "baseUrl": "./packages",
    "composite": true,
    "declaration": true,
    "emitDecoratorMetadata": true,
    "esModuleInterop": true,
    "experimentalDecorators": true,
    "forceConsistentCasingInFileNames": true,
    "importHelpers": true,
    "lib": [
      "es2015",
      "es2016",
      "es2017",
      "esnext.asynciterable"
    ],
    "module":"commonjs",
    "moduleResolution": "node",
    "paths": {
      "@serverlize/*": ["./*/src"]
    },
    "sourceMap": true,
    "strict": true,
    "target": "es2015",
    "typeRoots": [
      "node_modules/@types",
      "../../node_modules/@types"
    ]
  },
  "exclude": [
    "node_modules",
    "**/*.spec.ts"
  ]
}
Project
{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "declarationDir": "dist/types",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "outDir": "dist/lib"
  },
  "include": [
    "src"
  ],
  "references": [
    { "path": "../cdk" },
    { "path": "../support" }
  ]
}

package.json

plugin output with verbosity 3

Output
$ rollup -c

src/index.ts → dist/lambda.umd.js, dist/lambda.es5.js...
rpt2: typescript version: 3.0.1
rpt2: tslib version: 1.9.3
rpt2: rollup-plugin-typescript2 version: 0.17.0
rpt2: plugin options:
{
    "useTsconfigDeclarationDir": true,
    "verbosity": 3,
    "check": true,
    "clean": false,
    "cacheRoot": "/[PROJECT_ROOT]/packages/lambda/.rpt2_cache",
    "include": [
        "*.ts+(|x)",
        "**/*.ts+(|x)"
    ],
    "exclude": [
        "*.d.ts",
        "**/*.d.ts"
    ],
    "abortOnError": true,
    "rollupCommonJSResolveHack": false,
    "typescript": "version 3.0.1",
    "tsconfigOverride": {},
    "transformers": [],
    "tsconfigDefaults": {},
    "objectHashIgnoreUnknownHack": false
}
rpt2: rollup config:
{
    "experimentalCacheExpiry": 10,
    "external": [
        "",
        ""
    ],
    "inlineDynamicImports": false,
    "input": "src/index.ts",
    "chunkGroupingSize": 5000,
    "perf": false,
    "plugins": [
        {
            "name": "json"
        },
        {
            "name": "rpt2"
        },
        {
            "name": "commonjs"
        },
        {
            "name": "node-resolve"
        },
        {
            "name": "sourcemaps"
        }
    ],
    "watch": {
        "include": "src/**"
    },
    "entry": "src/index.ts"
}
rpt2: built-in options overrides: {
    "noEmitHelpers": false,
    "importHelpers": true,
    "noResolve": false,
    "noEmit": false,
    "inlineSourceMap": false,
    "outDir": "/[PROJECT_ROOT]/packages/lambda/.rpt2_cache/placeholder",
    "moduleResolution": 2,
    "declarationDir": null,
    "sourceRoot": null
}
rpt2: parsed tsconfig: {
    "options": {
        "allowSyntheticDefaultImports": true,
        "baseUrl": "/[PROJECT_ROOT]/packages",
        "composite": true,
        "declaration": true,
        "emitDecoratorMetadata": true,
        "esModuleInterop": true,
        "experimentalDecorators": true,
        "forceConsistentCasingInFileNames": true,
        "importHelpers": true,
        "lib": [
            "lib.es2015.d.ts",
            "lib.es2016.d.ts",
            "lib.es2017.d.ts",
            "lib.esnext.asynciterable.d.ts"
        ],
        "module": 5,
        "moduleResolution": 2,
        "paths": {
            "@serverlize/*": [
                "./*/src"
            ]
        },
        "sourceMap": true,
        "strict": true,
        "target": 2,
        "typeRoots": [
            "/[PROJECT_ROOT]/node_modules/@types",
            "/Users/hassankhan/Projects/endemolshine/open-source/node_modules/@types"
        ],
        "declarationDir": null,
        "outDir": "/[PROJECT_ROOT]/packages/lambda/.rpt2_cache/placeholder",
        "configFilePath": "/[PROJECT_ROOT]/packages/lambda/tsconfig.json",
        "noEmitHelpers": false,
        "noResolve": false,
        "noEmit": false,
        "inlineSourceMap": false,
        "sourceRoot": null
    },
    "fileNames": [
        "/[PROJECT_ROOT]/packages/lambda/src/enhance.ts",
        "/[PROJECT_ROOT]/packages/lambda/src/index.ts",
        "/[PROJECT_ROOT]/packages/lambda/src/types.ts",
        "/[PROJECT_ROOT]/packages/lambda/src/Annotations/Function.ts"
    ],
    "projectReferences": [
        {
            "path": "/[PROJECT_ROOT]/packages/cdk",
            "originalPath": "../cdk"
        },
        {
            "path": "/[PROJECT_ROOT]/packages/support",
            "originalPath": "../support"
        }
    ],
    "typeAcquisition": {
        "enable": false,
        "include": [],
        "exclude": []
    },
    "raw": {
        "compilerOptions": {
            "module": "ES2015",
            "declarationDir": "dist/types",
            "emitDecoratorMetadata": true,
            "experimentalDecorators": true,
            "outDir": "dist/lib"
        },
        "extends": "../../tsconfig.json",
        "include": [
            "src"
        ],
        "references": [
            {
                "path": "../cdk"
            },
            {
                "path": "../support"
            }
        ],
        "compileOnSave": false,
        "exclude": [
            "../../node_modules",
            "../../**/*.spec.ts"
        ]
    },
    "errors": [],
    "wildcardDirectories": {
        "/[PROJECT_ROOT]/packages/lambda/src": 1
    },
    "compileOnSave": false,
    "configFileSpecs": {
        "includeSpecs": [
            "src"
        ],
        "excludeSpecs": [
            "../../node_modules",
            "../../**/*.spec.ts"
        ],
        "validatedIncludeSpecs": [
            "src"
        ],
        "validatedExcludeSpecs": [
            "../../node_modules",
            "../../**/*.spec.ts"
        ],
        "wildcardDirectories": {
            "/[PROJECT_ROOT]/packages/lambda/src": 1
        }
    }
}
rpt2: included:
'[
    "*.ts+(|x)",
    "**/*.ts+(|x)"
]'
rpt2: excluded:
'[
    "*.d.ts",
    "**/*.d.ts"
]'
rpt2: options error TS6059 File '/[PROJECT_ROOT]/packages/cdk/src/index.ts' is not under 'rootDir' '/[PROJECT_ROOT]/packages/lambda'. 'rootDir' is expected to contain all source files.
rpt2: options error TS6307 File '/[PROJECT_ROOT]/packages/cdk/src/index.ts' is not in project file list. Projects must list all files or use an 'include' pattern.
rpt2: Ambient types:
rpt2:     /[PROJECT_ROOT]/node_modules/@types/aws-lambda/index.d.ts
rpt2:     /[PROJECT_ROOT]/node_modules/@types/cosmiconfig/index.d.ts
rpt2:     /[PROJECT_ROOT]/node_modules/@types/estree/index.d.ts
rpt2:     /[PROJECT_ROOT]/node_modules/@types/events/index.d.ts
rpt2:     /[PROJECT_ROOT]/node_modules/@types/execa/index.d.ts
rpt2:     /[PROJECT_ROOT]/node_modules/@types/fs-extra/index.d.ts
rpt2:     /[PROJECT_ROOT]/node_modules/@types/glob/index.d.ts
rpt2:     /[PROJECT_ROOT]/node_modules/@types/handlebars/index.d.ts
rpt2:     /[PROJECT_ROOT]/node_modules/@types/highlight.js/index.d.ts
rpt2:     /[PROJECT_ROOT]/node_modules/@types/jest/index.d.ts
rpt2:     /[PROJECT_ROOT]/node_modules/@types/lodash/index.d.ts
rpt2:     /[PROJECT_ROOT]/node_modules/@types/lodash.find/index.d.ts
rpt2:     /[PROJECT_ROOT]/node_modules/@types/lodash.get/index.d.ts
rpt2:     /[PROJECT_ROOT]/node_modules/@types/lodash.has/index.d.ts
rpt2:     /[PROJECT_ROOT]/node_modules/@types/lodash.isarray/index.d.ts
rpt2:     /[PROJECT_ROOT]/node_modules/@types/lodash.pick/index.d.ts
rpt2:     /[PROJECT_ROOT]/node_modules/@types/marked/index.d.ts
rpt2:     /[PROJECT_ROOT]/node_modules/@types/minimatch/index.d.ts
rpt2:     /[PROJECT_ROOT]/node_modules/@types/node/index.d.ts
rpt2:     /[PROJECT_ROOT]/node_modules/@types/shelljs/index.d.ts
rpt2: transpiling '/[PROJECT_ROOT]/packages/lambda/src/index.ts'
rpt2:     cache: '/[PROJECT_ROOT]/packages/lambda/.rpt2_cache/rpt2_b33a1f7fab3e88a4c8f2f4b6aebb7d3309529ba6/code/cache/2f121cf4034321b46ef658bd341dd2c4f6c96d1f'
rpt2:     cache hit
rpt2:     cache: '/[PROJECT_ROOT]/packages/lambda/.rpt2_cache/rpt2_b33a1f7fab3e88a4c8f2f4b6aebb7d3309529ba6/syntacticDiagnostics/cache/2f121cf4034321b46ef658bd341dd2c4f6c96d1f'
rpt2:     cache hit
rpt2:     cache: '/[PROJECT_ROOT]/packages/lambda/.rpt2_cache/rpt2_b33a1f7fab3e88a4c8f2f4b6aebb7d3309529ba6/semanticDiagnostics/cache/2f121cf4034321b46ef658bd341dd2c4f6c96d1f'
rpt2:     cache hit
rpt2: generated declarations for '/[PROJECT_ROOT]/packages/lambda/src/index.ts'
rpt2: dependency '/[PROJECT_ROOT]/packages/lambda/src/enhance.ts'
rpt2:     imported by '/[PROJECT_ROOT]/packages/lambda/src/index.ts'
rpt2: resolving './enhance'
rpt2:     to '/[PROJECT_ROOT]/packages/lambda/src/enhance.ts'
rpt2: transpiling '/[PROJECT_ROOT]/packages/lambda/src/enhance.ts'
rpt2:     cache: '/[PROJECT_ROOT]/packages/lambda/.rpt2_cache/rpt2_b33a1f7fab3e88a4c8f2f4b6aebb7d3309529ba6/code/cache/d250d6bf85931e257b7af5ef161fc4f4384a5df9'
rpt2:     cache hit
rpt2:     cache: '/[PROJECT_ROOT]/packages/lambda/.rpt2_cache/rpt2_b33a1f7fab3e88a4c8f2f4b6aebb7d3309529ba6/syntacticDiagnostics/cache/d250d6bf85931e257b7af5ef161fc4f4384a5df9'
rpt2:     cache hit
rpt2:     cache: '/[PROJECT_ROOT]/packages/lambda/.rpt2_cache/rpt2_b33a1f7fab3e88a4c8f2f4b6aebb7d3309529ba6/semanticDiagnostics/cache/d250d6bf85931e257b7af5ef161fc4f4384a5df9'
rpt2:     cache hit
rpt2: generated declarations for '/[PROJECT_ROOT]/packages/lambda/src/enhance.ts'
rpt2: resolving './isPromise'
rpt2:     to '/[PROJECT_ROOT]/node_modules/@middy/core/isPromise.js'
rpt2: resolving 'once'
rpt2:     to '/[PROJECT_ROOT]/node_modules/once/once.js'
rpt2: resolving './isPromise'
rpt2:     to '/[PROJECT_ROOT]/node_modules/@middy/core/isPromise.js'
rpt2: resolving 'once'
rpt2:     to '/[PROJECT_ROOT]/node_modules/once/once.js'
rpt2: resolving 'wrappy'
rpt2:     to '/[PROJECT_ROOT]/node_modules/wrappy/wrappy.js'
rpt2: resolving 'wrappy'
rpt2:     to '/[PROJECT_ROOT]/node_modules/wrappy/wrappy.js'
rpt2: resolving '/[PROJECT_ROOT]/node_modules/@middy/core/isPromise.js'
rpt2:     to '/[PROJECT_ROOT]/node_modules/@middy/core/isPromise.js'
rpt2: resolving '/[PROJECT_ROOT]/node_modules/once/once.js'
rpt2:     to '/[PROJECT_ROOT]/node_modules/once/once.js'
rpt2: resolving '/[PROJECT_ROOT]/node_modules/wrappy/wrappy.js'
rpt2:     to '/[PROJECT_ROOT]/node_modules/wrappy/wrappy.js'
rpt2: generating target 1
rpt2: rolling caches
rpt2: generating target 2
rpt2: rolling caches
rpt2: generating missed declarations for '/[PROJECT_ROOT]/packages/lambda/src/types.ts'
rpt2: generating missed declarations for '/[PROJECT_ROOT]/packages/lambda/src/Annotations/Function.ts'
rpt2: writing declarations for '/[PROJECT_ROOT]/packages/lambda/src/index.ts' to '/[PROJECT_ROOT]/packages/lambda/.rpt2_cache/placeholder/src/index.d.ts'
rpt2: writing declarations for '/[PROJECT_ROOT]/packages/lambda/src/enhance.ts' to '/[PROJECT_ROOT]/packages/lambda/.rpt2_cache/placeholder/src/enhance.d.ts'
rpt2: writing declarations for '/[PROJECT_ROOT]/packages/lambda/src/types.ts' to '/[PROJECT_ROOT]/packages/lambda/.rpt2_cache/placeholder/src/types.d.ts'
rpt2: writing declarations for '/[PROJECT_ROOT]/packages/lambda/src/Annotations/Function.ts' to '/[PROJECT_ROOT]/packages/lambda/.rpt2_cache/placeholder/src/Annotations/Function.d.ts'
rpt2: writing declarations for '/[PROJECT_ROOT]/packages/lambda/src/index.ts' to '/[PROJECT_ROOT]/packages/lambda/.rpt2_cache/placeholder/src/index.d.ts'
rpt2: writing declarations for '/[PROJECT_ROOT]/packages/lambda/src/enhance.ts' to '/[PROJECT_ROOT]/packages/lambda/.rpt2_cache/placeholder/src/enhance.d.ts'
rpt2: writing declarations for '/[PROJECT_ROOT]/packages/lambda/src/types.ts' to '/[PROJECT_ROOT]/packages/lambda/.rpt2_cache/placeholder/src/types.d.ts'
rpt2: writing declarations for '/[PROJECT_ROOT]/packages/lambda/src/Annotations/Function.ts' to '/[PROJECT_ROOT]/packages/lambda/.rpt2_cache/placeholder/src/Annotations/Function.d.ts'
created dist/lambda.umd.js, dist/lambda.es5.js in 1.4s

Similar issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind: featureNew feature or requestkind: supportAsking for support with something or a specific use casesolution: duplicateThis issue or pull request already existstopic: monorepo / symlinksRelated to monorepos and/or symlinks (Lerna, Yarn, PNPM, Rush, etc)

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions