Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Help when building storybook and deploying on Vercel #136

Open
alexbjorlig opened this issue Jan 23, 2024 · 8 comments
Open

Help when building storybook and deploying on Vercel #136

alexbjorlig opened this issue Jan 23, 2024 · 8 comments

Comments

@alexbjorlig
Copy link

I'm pretty new to Storybook, and hope you can help me out here.

I have msw-storybook-addon installed version 1.10.0, working fine running locally on my machine.

When I try to build the storybook with the storybook build command, everything also seems to work on Vercel. However, when I visit the environment I get this error:

[MSW] Failed to register a Service Worker for scope ('https://ui-seven-kappa.vercel.app/') with script ('https://ui-seven-kappa.vercel.app/mockServiceWorker.js'): Service Worker script does not exist at the given path.

Did you forget to run "npx msw init <PUBLIC_DIR>"?

Learn more about creating the Service Worker script: https://mswjs.io/docs/cli/init

I tried adding

"msw": {
  "workerDirectory": "public"
}

But that did not seem to help.
On Vercel I'm using the Storybook framework preset, that lists storybook-static as "Output directory".

What is wrong with the above configuration 🧐?

@ben-hamel
Copy link

ben-hamel commented Jan 26, 2024

I'm also having same exact issue when deploying to GitLab pages. Everything works when I build locally and run through http server, or the live server plugin in VsCode. I can download the build file from the pipeline, and run it the same way. The page will deploy but won't find the MockServiceWorker.js. Never had issues with storybook 6.5 and this plugin. But we upgraded to sb7 and now can't get this to deploy properly.

@ben-hamel
Copy link

also, my Vite has a base url, that might be causing issue. www.example.com/mockServiceWorker.js will show mock service worker route, but www.example.com/my-app/mockServiceWorker.js wont. @alexbjorlig do you have something like this in your vite.config setup?

@jimsheen
Copy link

jimsheen commented Feb 1, 2024

@alexbjorlig @ben-hamel

adding this to .storybook/main.js worked for me

  staticDirs: ['../public'],

https://storybook.js.org/docs/7.4/configure/images-and-assets

I believe you can also do this in package.json scripts, although I didn't try

"storybook": "storybook dev -p 6006 -s ../public"

Hope that helps!

@alexbjorlig
Copy link
Author

Hi @jimsheen , I troed adding staticDirs: ['../public'] to .storybook/main.js, but this just gives me this error at built-time in Vercel:

Error: Failed to load static files, no such directory: /vercel/path0/public

@ben-hamel
Copy link

ben-hamel commented Feb 2, 2024

@alexbjorlig What version of Storybook are you running? webpack or vite?

@alexbjorlig
Copy link
Author

@ben-hamel

vite

Storybook Environment Info:

  System:
    OS: macOS 14.3
    CPU: (10) arm64 Apple M1 Max
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 18.17.1 - ~/.nvm/versions/node/v18.17.1/bin/node
    npm: 10.2.5 - ~/.nvm/versions/node/v18.17.1/bin/npm <----- active
    pnpm: 8.12.0 - ~/.nvm/versions/node/v18.17.1/bin/pnpm
  Browsers:
    Chrome: 121.0.6167.139
    Safari: 17.3
  npmPackages:
    @storybook/addon-essentials: ^7.6.12 => 7.6.12 
    @storybook/addon-interactions: ^7.6.12 => 7.6.12 
    @storybook/addon-links: ^7.6.12 => 7.6.12 
    @storybook/addon-storysource: ^7.6.12 => 7.6.12 
    @storybook/addon-svelte-csf: ^4.1.0 => 4.1.0 
    @storybook/addon-themes: ^7.6.12 => 7.6.12 
    @storybook/blocks: ^7.6.12 => 7.6.12 
    @storybook/jest: ^0.2.3 => 0.2.3 
    @storybook/svelte: ^7.6.12 => 7.6.12 
    @storybook/sveltekit: ^7.6.12 => 7.6.12 
    @storybook/test: ^7.6.12 => 7.6.12 
    @storybook/test-runner: ^0.16.0 => 0.16.0 
    @storybook/testing-library: ^0.2.2 => 0.2.2 
    msw-storybook-addon: ^1.10.0 => 1.10.0 
    storybook: ^7.6.12 => 7.6.12

@SalahAdDin
Copy link

SalahAdDin commented Feb 27, 2024

@alexbjorlig @ben-hamel

adding this to .storybook/main.js worked for me

  staticDirs: ['../public'],

https://storybook.js.org/docs/7.4/configure/images-and-assets

I believe you can also do this in package.json scripts, although I didn't try

"storybook": "storybook dev -p 6006 -s ../public"

Hope that helps!

Yeah, it works, but then it breaks custom fonts to work.

We have the following setup derived from this issue:

staticDirs: [
    {
      from: "../public",
      to: "/public",
    },
    { from: "../public/fonts", to: "/fonts" },
  ],

With this, Storybook is unable to find the mockServiceWorker.js file.

So, let's try:

staticDirs: [
  "../public",
    { from: "../public/fonts", to: "/fonts" },
  ],

It does not work.

If we use staticDirs: ["../public"], , mock service worker works, but font's does not work!!!

What can we do here?

Storybook Environment Info:

  System:
    OS: Linux 6.1 Manjaro Linux
    CPU: (16) x64 AMD Ryzen 9 5900HX with Radeon Graphics
    Shell: 5.2.26 - /bin/bash
  Binaries:
    Node: 20.11.0 - ~/.nvm/versions/node/v20.11.0/bin/node
    Yarn: 1.22.21 - /usr/bin/yarn
    npm: 10.2.4 - ~/.nvm/versions/node/v20.11.0/bin/npm
    pnpm: 8.15.4 - /usr/bin/pnpm <----- active
  npmPackages:
    @storybook/addon-a11y: 7.6.17 => 7.6.17 
    @storybook/addon-essentials: 7.6.17 => 7.6.17 
    @storybook/addon-interactions: 7.6.17 => 7.6.17 
    @storybook/addon-links: 7.6.17 => 7.6.17 
    @storybook/addon-onboarding: 1.0.11 => 1.0.11 
    @storybook/addon-storysource: 7.6.17 => 7.6.17 
    @storybook/addon-themes: 7.6.17 => 7.6.17 
    @storybook/blocks: 7.6.17 => 7.6.17 
    @storybook/nextjs: 7.6.17 => 7.6.17 
    @storybook/react: 7.6.17 => 7.6.17 
    @storybook/test: 8.0.0-alpha.16 => 8.0.0-alpha.16 
    @storybook/theming: 7.6.17 => 7.6.17 
    eslint-plugin-storybook: 0.8.0 => 0.8.0 
    msw-storybook-addon: 2.0.0-beta.1 => 2.0.0-beta.1 
    storybook: 7.6.17 => 7.6.17 
    storybook-addon-pseudo-states: 2.1.2 => 2.1.2 
    storybook-addon-rtl: 1.0.0 => 1.0.0 

@SalahAdDin
Copy link

SalahAdDin commented Feb 28, 2024

@alexbjorlig
The following works for mocks, but does not work for fonts :') :

  staticDirs: [
    {
      from: "../public",
      to: "/",
    },
    { from: "../public/fonts", to: "fonts" },
  ],

This addon always looks the mock on the URL root.

I tried following this thread:

initialize({
  onUnhandledRequest: "warn",
  serviceWorker: {
    url: "/public/mockServiceWorker.js",
  },
});

It enables the mock but doesn't intercept any request:

[MSW] Cannot intercept requests on this page because it's outside of the worker's scope ("http://localhost:6006/public/"). If you wish to mock API requests on this page, you must resolve this scope issue.

- (Recommended) Register the worker at the root level ("/") of your application.
- Set the "Service-Worker-Allowed" response header to allow out-of-scope workers.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants