plugins: [@rollup/plugin-typescript] tsconfig declarationDir is ignored when using single file output

Expected Behavior

Declarations generated at the specified location

Actual Behavior

Declarations generated at the same directory as the output file.

Additional Information

I’m using api-extractor to rollup d.ts files into a single one, so the declarations are output at a place that will be removed after processing. This works at version 8.3.1 with a problem that it generates file at relative location under output directory, that is when declarationDir is types and output.file is dist/index.js, declarations will be under dist/types. But after my collegue updated to 8.3.4 (by using ^8.3.1 in package.json), the behavior changes to that declarations generated at dist/, and the build progress breaks since api-extractor can’t find the desired entry for d.ts rollup.

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Reactions: 23
  • Comments: 15

Commits related to this issue

Most upvoted comments

I found that there will be similar problems in the case of multi-file output

rollup.config.js

  output: [
    {
      dir: 'dist/cjs',
      format: 'cjs'
    },
    {
      dir: 'dist/es',
      format: 'es'
    },
  ],

tsconfig.json

 compilerOptions: {
    declaration: true,
    declarationDir: "dist/types"
  },

the error log

@rollup/plugin-typescript: Path of Typescript compiler option 'declarationDir' must be located inside Rollup 'dir' option.

Is this caused by the same problem?

+1 to get this fixed in the latest Rollup version 🙏

Hey folks. This issue hasn’t received any traction for 60 days, so we’re going to close this for housekeeping. If this is still an ongoing issue, please do consider contributing a Pull Request to resolve it. Further discussion is always welcome even with the issue closed. If anything actionable is posted in the comments, we’ll consider reopening it.

I got the same issue with 8.3.4. Now I have to create new tsconfig.types.json with declaration config “compilerOptions”: { “declaration”: true, “declarationDir”: “./dist/types”, “emitDeclarationOnly”: true, } then use tsc command to generate d.ts to specific folder. It works but it’s ugly. Hope it could be fixed asap.

Has this problem been solved yet

I got the issue as well. Reverting back to version 8.3.3 fixes the issue, so it seems it was introduced in the 8.3.4 release. The only change in that release is this; #1201, which may very well be the cause (also there’s other people talking about problems there as well).

Easiest temporary fix for now: revert back to 8.3.3 and pin this version in your package.json.

After some debugging, I’ve noticed that this issue comes up if you have a subfolder for the dir property.

E.g this is the config we had

  output: [
    {
      file: pkg.main,
      format: 'cjs',
      exports: 'named',
      sourcemap: true,
    },
    {
      dir: 'build/esm',
      format: 'esm',
      exports: 'named',
      sourcemap: true,
      preserveModules: true,
      preserveModulesRoot: 'src',
    },
  ],

The error went away when I changed build/esm to just build

Did this ever get fixed? Or still just sticking with old rollup version for now?

I use a a hack way to avoid error . use ts to generate .d.ts . use rollup to build …

I’m sticking with the old one at present. I don’t believe I saw anything about this getting fixed…

@himanshuchawla009 please do not post “me too,” “+1” type replies. They spam anyone who has notifications on for issues (e.g. all maintainers). Please use the reaction buttons on the original post in the issue instead.

Also confirmed.

In tsconfig.json I have: "declaration": false and in rollup.config.js I got

    typescript({
      compilerOptions: { declaration: true, declarationDir: './types' }
    }),

When rollup runs declaration file(s) are placed in the output directory and not specified ('./types')