docusaurus: Yarn PNP and TypeScript doesn't compile out of the box

Have you read the Contributing Guidelines on issues?

Prerequisites

  • I’m using the latest version of Docusaurus.
  • I have tried the npm run clear or yarn clear command.
  • I have tried rm -rf node_modules yarn.lock package-lock.json and re-installing packages.
  • I have tried creating a repro with https://new.docusaurus.io.
  • I have read the console error message carefully (if applicable).

Description

Yarn PNP and TypeScript doesn’t compile out of the box. I had to add the following entries to .yarnrc.yml to make it work:

.yarnrc.yml
  "@docusaurus/module-type-aliases@*":
    dependencies:
      "@types/history": "*"
      "@types/react-loadable": "*"
  "@docusaurus/plugin-content-blog@*":
    peerDependencies:
      "@docusaurus/types": "*"
  "@docusaurus/plugin-content-pages@*":
    peerDependencies:
      "@docusaurus/types": "*"
  "@docusaurus/plugin-content-docs@*":
    peerDependencies:
      "@docusaurus/types": "*"
    dependencies:
      "@docusaurus/module-type-aliases": "2.0.0-beta.14"
  "@docusaurus/theme-common@*":
    peerDependencies:
      "@docusaurus/types": "*"
      "@types/react": "*"
  "@docusaurus/theme-classic@*":
    peerDependencies:
      "@docusaurus/types": "*"
    dependencies:
      "utility-types": "*"
  "@docusaurus/preset-classic@*":
    peerDependencies:
      "@docusaurus/types": "*"
    dependencies:
      "@docusaurus/theme-common": "2.0.0-beta.14"
  "@docusaurus/mdx-loader@*":
    dependencies:
      "unified": "*"
  "@docusaurus/utils@*":
    peerDependencies:
      "@docusaurus/types": "*"

These are all dependencies that are missing or not properly declared.

Steps to reproduce

  1. yarn set version berry
  2. npx create-docusaurus@latest carsync-help classic --typescript
  3. yarn tsc

Expected behavior

Compiles without errors.

Actual behavior

Compilation errors reported:
../.yarn/__virtual__/@docusaurus-mdx-loader-virtual-adf7a41f60/0/cache/@docusaurus-mdx-loader-npm-2.0.0-beta.14-971ea241f9-248a8f73b4.zip/node_modules/@docusaurus/mdx-loader/src/mdx-loader.d.ts:8:27 - error TS2307: Cannot find module 'unified' or its corresponding type declarations.

8 import type {Plugin} from 'unified';
                            ~~~~~~~~~

../.yarn/__virtual__/@docusaurus-plugin-content-blog-virtual-e96af830a4/0/cache/@docusaurus-plugin-content-blog-npm-2.0.0-beta.14-3465a1b1cb-9d98707faa.zip/node_modules/@docusaurus/plugin-content-blog/src/plugin-content-blog.d.ts:29:30 - error TS2307: Cannot find module '@docusaurus/types' or its corresponding type declarations.

29   import type {TOCItem} from '@docusaurus/types';
                                ~~~~~~~~~~~~~~~~~~~

../.yarn/__virtual__/@docusaurus-plugin-content-docs-virtual-f0cdf7992e/0/cache/@docusaurus-plugin-content-docs-npm-2.0.0-beta.14-5f7a4ed55b-d7c1951f18.zip/node_modules/@docusaurus/plugin-content-docs/src/plugin-content-docs.d.ts:81:30 - error TS2307: Cannot find module '@docusaurus/types' or its corresponding type declarations.

81   import type {TOCItem} from '@docusaurus/types';
                                ~~~~~~~~~~~~~~~~~~~

../.yarn/__virtual__/@docusaurus-plugin-content-docs-virtual-f0cdf7992e/0/cache/@docusaurus-plugin-content-docs-npm-2.0.0-beta.14-5f7a4ed55b-d7c1951f18.zip/node_modules/@docusaurus/plugin-content-docs/src/types.ts:8:23 - error TS2688: Cannot find type definition file for '@docusaurus/module-type-aliases'.

8 /// <reference types="@docusaurus/module-type-aliases" />
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

../.yarn/__virtual__/@docusaurus-plugin-content-pages-virtual-dbf42224e5/0/cache/@docusaurus-plugin-content-pages-npm-2.0.0-beta.14-0bbd113bd5-1372f554d8.zip/node_modules/@docusaurus/plugin-content-pages/src/plugin-content-pages.d.ts:13:30 - error TS2307: Cannot find module '@docusaurus/types' or its corresponding type declarations.

13   import type {TOCItem} from '@docusaurus/types';
                                ~~~~~~~~~~~~~~~~~~~

../.yarn/__virtual__/@docusaurus-preset-classic-virtual-ab54b4a240/0/cache/@docusaurus-preset-classic-npm-2.0.0-beta.14-c882f4954f-67019820c8.zip/node_modules/@docusaurus/preset-classic/src/preset-classic.d.ts:19:34 - error TS2307: Cannot find module '@docusaurus/types' or its corresponding type declarations.

19 export type ThemeConfig = import('@docusaurus/types').ThemeConfig &
                                    ~~~~~~~~~~~~~~~~~~~

../.yarn/__virtual__/@docusaurus-preset-classic-virtual-ab54b4a240/0/cache/@docusaurus-preset-classic-npm-2.0.0-beta.14-c882f4954f-67019820c8.zip/node_modules/@docusaurus/preset-classic/src/preset-classic.d.ts:20:10 - error TS2307: Cannot find module '@docusaurus/theme-common' or its corresponding type declarations.

20   import('@docusaurus/theme-common').UserThemeConfig & {
            ~~~~~~~~~~~~~~~~~~~~~~~~~~

../.yarn/__virtual__/@docusaurus-theme-classic-virtual-ec17751a11/0/cache/@docusaurus-theme-classic-npm-2.0.0-beta.14-ecbe2a9dfe-ebb4c362e4.zip/node_modules/@docusaurus/theme-classic/src/theme-classic.d.ts:602:30 - error TS2307: Cannot find module '@docusaurus/types' or its corresponding type declarations.

602   import type {TOCItem} from '@docusaurus/types';
                                 ~~~~~~~~~~~~~~~~~~~

../.yarn/__virtual__/@docusaurus-theme-classic-virtual-ec17751a11/0/cache/@docusaurus-theme-classic-npm-2.0.0-beta.14-ecbe2a9dfe-ebb4c362e4.zip/node_modules/@docusaurus/theme-classic/src/theme-classic.d.ts:617:30 - error TS2307: Cannot find module '@docusaurus/types' or its corresponding type declarations.

617   import type {TOCItem} from '@docusaurus/types';
                                 ~~~~~~~~~~~~~~~~~~~

../.yarn/__virtual__/@docusaurus-theme-classic-virtual-ec17751a11/0/cache/@docusaurus-theme-classic-npm-2.0.0-beta.14-ecbe2a9dfe-ebb4c362e4.zip/node_modules/@docusaurus/theme-classic/src/theme-classic.d.ts:642:30 - error TS2307: Cannot find module '@docusaurus/types' or its corresponding type declarations.

642   import type {TOCItem} from '@docusaurus/types';
                                 ~~~~~~~~~~~~~~~~~~~

../.yarn/__virtual__/@docusaurus-theme-classic-virtual-ec17751a11/0/cache/@docusaurus-theme-classic-npm-2.0.0-beta.14-ecbe2a9dfe-ebb4c362e4.zip/node_modules/@docusaurus/theme-classic/src/theme-classic.d.ts:655:30 - error TS2307: Cannot find module '@docusaurus/types' or its corresponding type declarations.

655   import type {TOCItem} from '@docusaurus/types';
                                 ~~~~~~~~~~~~~~~~~~~

../.yarn/__virtual__/@docusaurus-theme-classic-virtual-ec17751a11/0/cache/@docusaurus-theme-classic-npm-2.0.0-beta.14-ecbe2a9dfe-ebb4c362e4.zip/node_modules/@docusaurus/theme-classic/src/theme-classic.d.ts:809:31 - error TS2307: Cannot find module 'utility-types' or its corresponding type declarations.

809   import type {Optional} from 'utility-types';
                                  ~~~~~~~~~~~~~~~

../.yarn/__virtual__/@docusaurus-theme-common-virtual-58b8d3e7b7/0/cache/@docusaurus-theme-common-npm-2.0.0-beta.14-de796828fc-dbe969d676.zip/node_modules/@docusaurus/theme-common/lib/utils/historyUtils.d.ts:7:15 - error TS2305: Module '"@docusaurus/history"' has no exported member 'Location'.

7 import type { Location, Action } from '@docusaurus/history';
                ~~~~~~~~

../.yarn/__virtual__/@docusaurus-theme-common-virtual-58b8d3e7b7/0/cache/@docusaurus-theme-common-npm-2.0.0-beta.14-de796828fc-dbe969d676.zip/node_modules/@docusaurus/theme-common/lib/utils/historyUtils.d.ts:7:25 - error TS2305: Module '"@docusaurus/history"' has no exported member 'Action'.

7 import type { Location, Action } from '@docusaurus/history';
                          ~~~~~~

../.yarn/__virtual__/@docusaurus-theme-common-virtual-58b8d3e7b7/0/cache/@docusaurus-theme-common-npm-2.0.0-beta.14-de796828fc-dbe969d676.zip/node_modules/@docusaurus/theme-common/lib/utils/tocUtils.d.ts:7:25 - error TS2307: Cannot find module '@docusaurus/types' or its corresponding type declarations.

7 import { TOCItem } from '@docusaurus/types';
                          ~~~~~~~~~~~~~~~~~~~

../.yarn/__virtual__/@docusaurus-theme-common-virtual-58b8d3e7b7/0/cache/@docusaurus-theme-common-npm-2.0.0-beta.14-de796828fc-dbe969d676.zip/node_modules/@docusaurus/theme-common/lib/utils/useLocationChange.d.ts:7:10 - error TS2305: Module '"@docusaurus/history"' has no exported member 'Location'.

7 import { Location } from '@docusaurus/history';
           ~~~~~~~~

../.yarn/__virtual__/@docusaurus-utils-virtual-064bf14a46/0/cache/@docusaurus-utils-npm-2.0.0-beta.14-d4176db19a-f527eeeca5.zip/node_modules/@docusaurus/utils/lib/index.d.ts:7:76 - error TS2307: Cannot find module '@docusaurus/types' or its corresponding type declarations.

7 import { ReportingSeverity, TranslationFileContent, TranslationFile } from '@docusaurus/types';
                                                                             ~~~~~~~~~~~~~~~~~~~

../.yarn/cache/@docusaurus-module-type-aliases-npm-2.0.0-beta.14-2a8c7bc4e7-d4bb46da11.zip/node_modules/@docusaurus/module-type-aliases/src/index.d.ts:99:44 - error TS2307: Cannot find module 'react-loadable' or its corresponding type declarations.

99   import type {LoadingComponentProps} from 'react-loadable';
                                              ~~~~~~~~~~~~~~~~

../.yarn/cache/@docusaurus-module-type-aliases-npm-2.0.0-beta.14-2a8c7bc4e7-d4bb46da11.zip/node_modules/@docusaurus/module-type-aliases/src/index.d.ts:233:17 - error TS2307: Cannot find module 'history' or its corresponding type declarations.

233   export * from 'history';
                    ~~~~~~~~~

../.yarn/cache/@docusaurus-module-type-aliases-npm-2.0.0-beta.14-2a8c7bc4e7-d4bb46da11.zip/node_modules/@docusaurus/module-type-aliases/src/index.d.ts:275:29 - error TS2307: Cannot find module 'react-loadable' or its corresponding type declarations.

275   import type Loadable from 'react-loadable';
                                ~~~~~~~~~~~~~~~~


Found 20 errors.

Your environment

  • Docusaurus version used: 2.0.0-beta.14

Reproducible demo

No response

Self-service

  • I’d be willing to fix this bug myself.

About this issue

  • Original URL
  • State: open
  • Created 3 years ago
  • Reactions: 1
  • Comments: 31 (7 by maintainers)

Most upvoted comments

@alamothe No; please compile with "moduleResolution": "NodeNext". We are using package.json exports field. Even better, consider using "skipLibCheck": true (which should be enabled by default in the latest shared tsconfig).

It worked 🎉 Thanks for the help 😁

I’ll check tomorrow, but we’re supposed to prioritize non-deprecated releases if there’s any matching the requested range (failing that, we pick a deprecated one) 🤔

Iirc the npm semver calculator uses a very old version of the semver package, with some different results.

The downside is that if the user does not care about TypeScript and uses plain JavaScript, they would still get this dependency. Perhaps there should be a concept of typeDependency?

There aren’t (very short discussion here, there are a few other threads). At the moment the best option would be to use peerDependencies, and let package managers implement @types pruning.

Also, it seems like "extends": "@tsconfig/docusaurus/tsconfig.json", doesn’t work in PnP? Does Yarn have custom resolver support for this?

@Josh-Cena Seems like we missed this spot when adding PnP support to TS, I’ll make an issue on our side to address that No actually scratch that, I tried in the wrong repo, it seems to work fine, sorry 😅

I see - I got the wrong version due to your versioning scheme: you published a 2.0.0-beta.ff31de0ff in August, which per semver rules is higher than ^2.0.0-beta.14, so that’s the version which got installed 🤔