Error when initializaing/extracting storybook
Closed this issue · 5 comments
Error: Error: page.evaluate: Error: Failed to initialize Storybook.
Do you have an error in your `preview.js`? Check your Storybook's browser console for errors.
at PreviewWeb.extract (https://5fd258d324cc620021b8062c-kiqkvfmxpn.capture-loopback.chromatic.com/sb-preview/runtime.js:101:5390)
at extractStoryData (eval at evaluate (:192:30), <anonymous>:243:29)
at UtilityScript.evaluate (<anonymous>:194:17)
at UtilityScript.<anonymous> (<anonymous>:1:44)
→ Failed to publish build
ℹ Wrote Chromatic diagnostics report to chromatic-diagnostics.json
ELIFECYCLE Command failed with exit code 23.
Environment:
node: 20.10.0
platform: linux/macos/cimg-node:20.10.0
storybook: 7.5.3
chromatic: 7.1.0
We're running into this issue consistently every build/run. It suddenly started failing yesteday.
Here's a storybook deployment that loads without any errors in chrome, but fails with the error above when ran in chromatic: https://5fd258d324cc620021b8062c-joqrmlnqzp.chromatic.com/ . Our storybook builds seem to all run fine in the browser.
What we've tried (but got the same error):
- bump storybook to latest
- bump chromatic to latest
- comment out custom code in .storybook/preview.tsx
- no sourcemaps
- no storybook addons
- no turbosnap
- try 50/100 hundred commits in the past
- run with just one story (Login.stories.tsx)
Vite config
import fs from "node:fs/promises";
import { createRequire } from "node:module";
import path from "node:path";
import url from "node:url";
import react from "@vitejs/plugin-react";
import { defineConfig, loadEnv, PluginOption } from "vite";
import viteTsconfigPaths from "vite-tsconfig-paths";
enum TargetBundle {
PsPDFKit = "vendor-pspdfkit",
Vendor = "vendor",
}
const splitOffBigChunks = (moduleUrl: string): TargetBundle | undefined => {
if (moduleUrl.includes("node_modules")) {
return moduleUrl.includes("pspdfkit")
? TargetBundle.PsPDFKit
: TargetBundle.Vendor;
}
};
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd());
const envWithProcessPrefix = Object.entries(env).reduce(
(prev, [key, val]) => {
return {
...prev,
["process.env." + key]: `"${val}"`,
};
},
{}
);
return {
define: envWithProcessPrefix,
optimizeDeps: {
include: [
"@loancrate/schema-json",
"@loancrate/gql",
"@loancrate/shared/*",
"@loancrate/validation-rules",
],
},
plugins: [viteTsconfigPaths(), react(), reactVirtualized()],
build: {
sourcemap: true,
commonjsOptions: {
include: [
/schema-json/,
/gql/,
/shared/,
/validation-rules/,
/node_modules/,
],
},
rollupOptions: {
output: {
manualChunks: splitOffBigChunks,
},
},
},
};
});
const WRONG_CODE =
'import { bpfrpt_proptype_WindowScroller } from "../WindowScroller.js";';
function reactVirtualized(): PluginOption {
return {
name: "flat:react-virtualized",
configResolved: async () => {
const require = createRequire(import.meta.url);
const reactVirtualizedPath = require.resolve("react-virtualized");
const { pathname: reactVirtualizedFilePath } = new url.URL(
reactVirtualizedPath,
import.meta.url
);
const file = reactVirtualizedFilePath.replace(
path.join("dist", "commonjs", "index.js"),
path.join("dist", "es", "WindowScroller", "utils", "onScroll.js")
);
const code = await fs.readFile(file, "utf-8");
const modified = code.replace(WRONG_CODE, "");
await fs.writeFile(file, modified);
},
};
}
Storybook config
import assert from "assert";
import { resolve } from "path";
import { StorybookConfig } from "@storybook/react-vite";
import { ConfigEnv, loadConfigFromFile, mergeConfig } from "vite";
import turbosnap from "vite-plugin-turbosnap";
import viteTsconfigPaths from "vite-tsconfig-paths";
const storybookConfig: StorybookConfig = {
framework: {
name: "@storybook/react-vite",
options: {},
},
stories: ["../src/**/*.stories.@(js|jsx|ts|tsx)"],
staticDirs: ["../public"],
addons: ["@storybook/addon-essentials"],
features: {
storyStoreV7: true,
},
async viteFinal(config) {
const project = await loadConfigFromFile(
config as ConfigEnv,
resolve(__dirname, "../vite.config.ts")
);
assert(project, `Couldn't load config`);
return mergeConfig(config, {
...project.config,
plugins: [
viteTsconfigPaths(),
turbosnap({ rootDir: config.root || process.cwd() }),
],
build: {
...project.config.build,
sourcemap: !process.env.CI,
},
});
},
docs: {
autodocs: true,
},
};
export default storybookConfig;
TSConfig
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"target": "ES2021",
"lib": ["dom", "dom.iterable", "ES2021"],
"allowJs": false,
"allowSyntheticDefaultImports": true,
"noFallthroughCasesInSwitch": true,
// https://www.typescriptlang.org/tsconfig#module
"module": "ES2020",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
"baseUrl": "src",
"sourceMap": true,
"inlineSources": true,
"sourceRoot": "/"
},
"include": ["src", "vite.config.ts"]
}
Here's the diagnostics json
chromatic-diagnostics.json
@KonstantinSimeonov Thanks for reporting this issue. Can you email us via support@chromatic.com? So, that we can diagnose the issue further.
The issue got resolved for us after talking to support@chromatic.com. Thank you @thafryer!
Can you drop the details on what you did to fix it @KonstantinSimeonov ?
@mabernethy We didn't do anything in particular - I sent the output of
npx chromatic --project-token YOUR_TOKEN --debug --diagnostics
(both the command line output and the json diagnostics) to support at support@chromatic.com. After a day or two we got contacted that the issue should be resolved without us changing our current setup.