Search code examples
next.jsmonorepokeystonejsturborepo

Keystone crashes inside Turborepo


Keystone fails to find dependencies while running yarn build inside a new Turborepo project.

Steps to reproduce

  1. Install Turborepo in a new project npx create-turbo@latest

  2. navigate to the apps folder or wherever you plan to install Keystone cd apps/

  3. install keystone yarn create keystone-app

  4. navigate back to the root directory cd ../

  5. add .keystone/** to turbo.json Pipeline:

"build": {"dependsOn": [ "^build" ], "outputs": [ ".next/**", ".keystone/admin/.next/**" ]}}
  1. build project from root directory cd ../ && yarn build

Observe error message from inside ./keystone

enter image description here

turbo.json

{
  "pipeline": {
    "build": {
      "dependsOn": [
        "^build"
      ],
      "outputs": [
        ".next/**",
        ".keystone/admin/.next/**"
      ]
    },
    "dev": {
      "cache": false
    },
    "clean": {
      "cache": false
    }
  },
  "globalDependencies": [
    "tsconfig.json",
    ".prettierrc.json",
    ".eslintrc.json",
    "Procfile"
  ]
}

package.json

{
  "private": true,
  "workspaces": [
    "packages/*",
    "apps/*"
  ],
  "scripts": {
    "build": "turbo run build",
    "dev": "turbo run dev --no-cache --parallel --continue",
    "lint": "turbo run lint",
    "test": "turbo run test",
    "clean": "turbo run clean && rm -rf node_modules",
    "format": "prettier --write \"**/*.{ts,tsx,js,md}\""
  },
  "devDependencies": {
    "prettier": "^2.5.1",
    "turbo": "latest"
  },
  "packageManager": "[email protected]"
}

apps/keystoneCMS/package.json

{
  "name": "logly-admin",
  "version": "1.0.0",
  "private": true,
  "main": "keystone.ts",
  "scripts": {
    "dev": "keystone dev",
    "start": "keystone start",
    "build": "keystone build && keystone prisma migrate deploy",
    "postinstall": "keystone postinstall"
  },
  "dependencies": {
    "@emotion/css": "^11.7.1",
    "@keystone-6/auth": "^1.0.1",
    "@keystone-6/cloudinary": "^1.0.0",
    "@keystone-6/core": "^1.1.0",
    "@keystone-6/fields-document": "^1.0.1",
    "@prisma/client": "^3.8.1",
    "autoprefixer": "^10.4.2",
    "dotenv": "^10.0.0",
    "formik": "^2.2.9",
    "postcss": "^8.4.7",
    "tailwind": "^4.0.0",
    "tailwindcss": "^3.0.23",
    "typescript": "^4.5.4"
  },
  "engines": {
    "node": "^14.15 || ^16.13"
  }
}

Github issue for more context: https://github.com/keystonejs/keystone/issues/7518

Versions Node: v16.13.1 (latest) Keystone: v6 (latest) Turborepo: 1.2.8 (latest)


Solution

  • I have been able to replicate this, and it looks to be an issue with the next version that npx create-turbo@latest installs and is pinned to. Running create-turbo installs next 12.0.8 and is pinned to that version. Keystone requires at least version 12.1.0.

    When I changed my ./apps/web/package.json to:

      "dependencies": {
        "next": "^12.1.0",
        "react": "17.0.2",
        "react-dom": "17.0.2",
        "ui": "*"
      },
    

    The error no longer occurred.