nrwl / nx

Smart Monorepos · Fast CI
https://nx.dev
MIT License
23.37k stars 2.33k forks source link

Running @storybook/angular:start-storybook with Storybook 8 fails to load preset #26531

Closed morgnism closed 1 month ago

morgnism commented 3 months ago

Current Behavior

Migrating an existing (working) angular app with storybook version 8 fails to launch in an angular monorepo.

Expected Behavior

The migrated storybook app should launch.

GitHub Repo

No response

Steps to Reproduce

Before migrating the project files, I generated a new storybook setup:

  1. Use Nx Console or cli to generate storybook for a shared lib: nx g @nx/angular:storybook-configuration shared-ui.
  2. Choose false on everything.
  3. Start the server with: npx nx run shared-ui:storybook
  4. See the failure log

Nx Report

Node   : 18.13.0
OS     : win32-x64
npm    : 8.19.3

nx                 : 19.2.3
@nx/js             : 19.2.3
@nx/jest           : 19.2.3
@nx/linter         : 19.2.3
@nx/eslint         : 19.2.3
@nx/workspace      : 19.2.3
@nx/angular        : 19.2.3
@nx/cypress        : 19.2.3
@nx/devkit         : 19.2.3
@nx/eslint-plugin  : 19.2.3
@nx/storybook      : 19.2.3
@nrwl/tao          : 19.2.3
@nx/web            : 19.2.3
@nx/webpack        : 19.2.3
typescript         : 5.4.5
---------------------------------------
Registered Plugins:
@nx/cypress/plugin
@nx/eslint/plugin
---------------------------------------
Community plugins:
@compodoc/compodoc : 1.1.25
@storybook/angular : 8.1.7

Failure Logs

SB_CORE-SERVER_0002 (CriticalPresetLoadError): Storybook failed to load the following preset: @storybook\angular\preset.

Please check whether your setup is correct, the Storybook dependencies (and their peer dependencies) are installed correctly and there are no package version clashes.

If you believe this is a bug, please open an issue on Github.

SB_CORE-SERVER_0002 (CriticalPresetLoadError): Storybook failed to load the following preset: .\node_modules\@storybook\angular\dist\server\framework-preset-angular-cli.js.

Please check whether your setup is correct, the Storybook dependencies (and their peer dependencies) are installed correctly and there are no package version clashes.

If you believe this is a bug, please open an issue on Github.

TypeError: (0 , os_1.availableParallelism) is not a function
    at Object.<anonymous> (.\node_modules\@angular\build\node_modules\piscina\dist\src\index.js:37:54)
    at Module._compile (node:internal/modules/cjs/loader:1218:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1272:10)
    at Object.newLoader (.\node_modules\esbuild-register\dist\node.js:2262:9)
    at extensions..js (.\node_modules\esbuild-register\dist\node.js:4838:24)
    at Module.load (node:internal/modules/cjs/loader:1081:32)
    at Module._load (node:internal/modules/cjs/loader:922:12)
    at Module.require (node:internal/modules/cjs/loader:1105:19)
    at Module.require (.\node_modules\nx\src\adapter\compat.js:66:40)
    at require (node:internal/modules/cjs/helpers:103:18)
    at loadPreset (.\node_modules\@storybook\core-common\dist\index.js:12:59)
    at loadPreset (.\node_modules\@storybook\core-common\dist\index.js:12:59)
    at async Promise.all (index 0)
    at async loadPresets (.\node_modules\@storybook\core-common\dist\index.js:12:483)
    at async getPresets (.\node_modules\@storybook\core-common\dist\index.js:12:1503)
    at async buildDevStandalone (.\node_modules\@storybook\core-server\dist\index.js:77:2024)
    at async withTelemetry (.\node_modules\@storybook\core-server\dist\index.js:40:3599)

Package Manager Version

No response

Operating System

Additional Information

When running the generate script (nx Console or cli), here's a snapshot of the generated parts.

Note: there are references to tsconfig.storybook.json but this file is never generated.

project.json

"targets": {
     ...
    "storybook": {
      "executor": "@storybook/angular:start-storybook",
      "options": {
        "port": 4400,
        "configDir": "libs/shared/ui/.storybook",
        "browserTarget": "shared-ui:build-storybook",
        "compodoc": false
      },
      "configurations": {
        "ci": {
          "quiet": true
        }
      }
    },
    "build-storybook": {
      "executor": "@storybook/angular:build-storybook",
      "outputs": ["{options.outputDir}"],
      "options": {
        "outputDir": "dist/storybook/shared-ui",
        "configDir": "libs/shared/ui/.storybook",
        "browserTarget": "shared-ui:build-storybook",
        "compodoc": false
      },
      "configurations": {
        "ci": {
          "quiet": true
        }
      }
    }
}

nx.json:

{
  "namedInputs": {
    "default": ["{projectRoot}/**/*", "sharedGlobals"],
    "production": [
       ...
      "!{projectRoot}/**/*.stories.@(js|jsx|ts|tsx|mdx)",
      "!{projectRoot}/.storybook/**/*",
      "!{projectRoot}/tsconfig.storybook.json"
    ],
    ...
  },
  "targetDefaults": {
    "build-storybook": {
      "cache": true,
      "inputs": [
        "default",
        "^production",
        "{projectRoot}/.storybook/**/*",
        "{projectRoot}/tsconfig.storybook.json"
      ]
    }
    ...
}

package.json (post upgrade to version 8. I don't know why it installs react??):

{
  "dependencies": {
     ...
      "react": "^18.2.0",
      "react-dom": "^18.2.0",
     ...
  },
  "defDependencies": {
      ...
      "@nx/storybook": "19.2.3",
      "@storybook/addon-a11y": "^8.0.10",
      "@storybook/addon-docs": "^8.0.10",
      "@storybook/addon-essentials": "8.1.7",
      "@storybook/addon-interactions": "^8.0.10",
      "@storybook/addon-links": "^8.0.10",
      "@storybook/angular": "8.1.7",
      "@storybook/blocks": "^8.0.10",
      "@storybook/core-server": "8.1.7",
      "@storybook/jest": "^0.2.3",
      "@storybook/test": "^8.0.10",
      "@storybook/testing-library": "^0.2.2",
      ...
}
morgnism commented 3 months ago

I gave this a fresh run again following the steps above and the server started up this time. The main change was updating my node version to LTS v22.3.0.

A few weird things about the generator still don't add up tho. i.e. Using the angular storybook configuration installs React, and references to files that haven't been generated.

Coly010 commented 3 months ago

@morgnism Hello!

I'll dig deeper as soon as I can, however, the storybook app itself is built with React so it needs it as a dependency. I'll see if the react installation is coming from our side or the storybook side though

morgnism commented 3 months ago

@morgnism Hello!

I'll dig deeper as soon as I can, however, the storybook app itself is built with React so it needs it as a dependency. I'll see if the react installation is coming from our side or the storybook side though

Thanks, Colum. Fyi, I upgraded to version 8 per the nx docs and noted the following:

Coly010 commented 3 months ago

We don't currently have official support for Storybook 8, but it is coming within the next two months. We may discover more as we add that support

github-actions[bot] commented 1 week ago

This issue has been closed for more than 30 days. If this issue is still occuring, please open a new issue with more recent context.