Hi,
First of all thanks for your work!,
I have configurated Storybook to use it with PostCSS, Tailwind, custom alias and webpack 5, but now I want to move to SWC. I am tried to configurate it removing Webpack 5 and adding the SWC plugin, but I am reciving a error with PostCSS. Could you help me?
Here is my OLD configuration:
const path = require('path');
const aliasConfig = require('../tsconfig.json');
const pathsNext = aliasConfig.compilerOptions.paths || {};
function getPaths(paths) {
const pathsSB = {};
const keys = Object.keys(paths);
keys.forEach(function (key) {
const alias = key.replace('/*', '');
const pathNext = `../${paths[key][0].replace('*', '')}`;
pathsSB[alias] = path.resolve(__dirname, pathNext);
});
return pathsSB;
}
module.exports = {
webpackFinal: async (config, { configType }) => {
config.resolve.modules = [path.resolve(__dirname, '..'), 'node_modules'];
config.resolve.alias = {
...config.resolve.alias,
...getPaths(pathsNext),
};
return config;
},
stories: [
'../components/**/*.stories.mdx',
'../components/**/*.stories.@(js|jsx|ts|tsx)',
'../stories/**/*.stories.mdx',
'../stories/**/*.stories.@(js|jsx|ts|tsx)',
],
addons: [
'@storybook/addon-links',
'@storybook/addon-essentials',
{
/**
* Fix Storybook issue with PostCSS@8
* @see https://github.com/storybookjs/storybook/issues/12668#issuecomment-773958085
*
* Fix Storybook issue with CSS Module and PostCSS
* @see https://github.com/storybookjs/addon-postcss/issues/29
*/
name: '@storybook/addon-postcss',
options: {
styleLoaderOptions: {},
cssLoaderOptions: {
modules: true,
sourceMap: true,
importLoaders: 1,
},
postcssLoaderOptions: {
implementation: require('postcss'),
},
},
},
],
staticDirs: ['../public', '../assets', '../stories/assets'],
framework: '@storybook/react',
core: {
builder: 'webpack5',
},
};
Here is my NEW configuration, removed core with Webpack 5 and added SWC plugin:
const path = require('path');
const aliasConfig = require('../tsconfig.json');
const pathsNext = aliasConfig.compilerOptions.paths || {};
function getPaths(paths) {
const pathsSB = {};
const keys = Object.keys(paths);
keys.forEach(function (key) {
const alias = key.replace('/*', '');
const pathNext = `../${paths[key][0].replace('*', '')}`;
pathsSB[alias] = path.resolve(__dirname, pathNext);
});
return pathsSB;
}
module.exports = {
webpackFinal: async (config, { configType }) => {
config.resolve.modules = [path.resolve(__dirname, '..'), 'node_modules'];
config.resolve.alias = {
...config.resolve.alias,
...getPaths(pathsNext),
};
return config;
},
stories: [
'../components/**/*.stories.mdx',
'../components/**/*.stories.@(js|jsx|ts|tsx)',
'../stories/**/*.stories.mdx',
'../stories/**/*.stories.@(js|jsx|ts|tsx)',
],
addons: [
'@storybook/addon-links',
'@storybook/addon-essentials',
{
/**
* Fix Storybook issue with PostCSS@8
* @see https://github.com/storybookjs/storybook/issues/12668#issuecomment-773958085
*
* Fix Storybook issue with CSS Module and PostCSS
* @see https://github.com/storybookjs/addon-postcss/issues/29
*/
name: '@storybook/addon-postcss',
options: {
styleLoaderOptions: {},
cssLoaderOptions: {
modules: true,
sourceMap: true,
importLoaders: 1,
},
postcssLoaderOptions: {
implementation: require('postcss'),
},
},
},
'storybook-addon-swc',
],
staticDirs: ['../public', '../assets', '../stories/assets'],
framework: '@storybook/react',
};
As I said before I tried to change the builder to SWC, removing core and added the SWC plugin. In the error message I see that Storybook said I am using Webpack 4, maybe I have a bad config. Here is the error:
yarn run v1.22.17
$ start-storybook -p 6006
info @storybook/react v6.4.13
info
info => Loading presets
info => Serving static files from ././public at /
info => Serving static files from ././assets at /
info => Serving static files from ././stories/assets at /
info => Loading custom manager config
info => Using PostCSS preset with [email protected]
info => Using default Webpack4 setup
info => Loading custom manager config
14% building 34/36 modules 2 active .../project-name/node_modules/@storybook/builder-webpack4/node_modules/webpack/buildin/module.js
info => Using cached manager
webpack built preview 086ae59b40b8b63edbce in 5673ms
✖ 「wdm」: Hash: 086ae59b40b8b63edbce
Version: webpack 4.46.0
Time: 5673ms
Built at: 22/03/2022 12:02:17
Asset Size Chunks Chunk Names
0.iframe.bundle.js 225 KiB 0 [emitted]
0.iframe.bundle.js.map 215 KiB 0 [emitted] [dev]
1.iframe.bundle.js 186 KiB 1 [emitted]
1.iframe.bundle.js.map 88.4 KiB 1 [emitted] [dev]
2.iframe.bundle.js 68.5 KiB 2 [emitted]
2.iframe.bundle.js.map 53.4 KiB 2 [emitted] [dev]
3.iframe.bundle.js 9.14 KiB 3 [emitted]
3.iframe.bundle.js.map 6.47 KiB 3 [emitted] [dev]
4.iframe.bundle.js 62.1 KiB 4 [emitted]
4.iframe.bundle.js.map 48.5 KiB 4 [emitted] [dev]
5.iframe.bundle.js 372 KiB 5 [emitted] [big]
5.iframe.bundle.js.map 412 KiB 5 [emitted] [dev]
6.iframe.bundle.js 15.7 KiB 6 [emitted]
6.iframe.bundle.js.map 16.6 KiB 6 [emitted] [dev]
iframe.html 11.7 KiB [emitted]
main.iframe.bundle.js 7.84 MiB main [emitted] [big] main
main.iframe.bundle.js.map 6.53 MiB main [emitted] [dev] main
Entrypoint main [big] = main.iframe.bundle.js main.iframe.bundle.js.map
[0] multi ./node_modules/@storybook/core-client/dist/esm/globals/polyfills.js ./node_modules/@storybook/core-client/dist/esm/globals/globals.js ./node_modules/webpack-hot-middleware/client.js?reload=true&quiet=false&noInfo=undefined ./storybook-init-framework-entry.js ./node_modules/@storybook/addon-essentials/node_modules/@storybook/addon-docs/dist/esm/frameworks/common/config.js-generated-config-entry.js ./node_modules/@storybook/addon-essentials/node_modules/@storybook/addon-docs/dist/esm/frameworks/react/config.js-generated-config-entry.js ./node_modules/@storybook/react/dist/esm/client/preview/config-generated-config-entry.js ./node_modules/@storybook/addon-links/dist/esm/preset/addDecorator.js-generated-config-entry.js ./node_modules/@storybook/addon-actions/dist/esm/preset/addDecorator.js-generated-config-entry.js ./node_modules/@storybook/addon-actions/dist/esm/preset/addArgs.js-generated-config-entry.js ./node_modules/@storybook/addon-backgrounds/dist/esm/preset/addDecorator.js-generated-config-entry.js ./node_modules/@storybook/addon-backgrounds/dist/esm/preset/addParameter.js-generated-config-entry.js ./node_modules/@storybook/addon-measure/dist/esm/preset/addDecorator.js-generated-config-entry.js ./node_modules/@storybook/addon-outline/dist/esm/preset/addDecorator.js-generated-config-entry.js ./.storybook/preview.js-generated-config-entry.js ./generated-stories-entry.js 208 bytes {main} [built]
[./.storybook/preview.js-generated-config-entry.js] 3.63 KiB {main} [built]
[./generated-stories-entry.js] 674 bytes {main} [built]
[./node_modules/@storybook/addon-actions/dist/esm/preset/addArgs.js-generated-config-entry.js] 2.99 KiB {main} [built]
[./node_modules/@storybook/addon-actions/dist/esm/preset/addDecorator.js-generated-config-entry.js] 3 KiB {main} [built]
[./node_modules/@storybook/addon-backgrounds/dist/esm/preset/addDecorator.js-generated-config-entry.js] 3 KiB {main} [built]
[./node_modules/@storybook/addon-backgrounds/dist/esm/preset/addParameter.js-generated-config-entry.js] 3 KiB {main} [built]
[./node_modules/@storybook/addon-essentials/node_modules/@storybook/addon-docs/dist/esm/frameworks/common/config.js-generated-config-entry.js] 3.04 KiB {main} [built]
[./node_modules/@storybook/addon-essentials/node_modules/@storybook/addon-docs/dist/esm/frameworks/react/config.js-generated-config-entry.js] 3.04 KiB {main} [built]
[./node_modules/@storybook/addon-links/dist/esm/preset/addDecorator.js-generated-config-entry.js] 3 KiB {main} [built]
[./node_modules/@storybook/addon-measure/dist/esm/preset/addDecorator.js-generated-config-entry.js] 3 KiB {main} [built]
[./node_modules/@storybook/addon-outline/dist/esm/preset/addDecorator.js-generated-config-entry.js] 3 KiB {main} [built]
[./node_modules/@storybook/core-client/dist/esm/globals/globals.js] 105 bytes {main} [built]
[./node_modules/@storybook/core-client/dist/esm/globals/polyfills.js] 97 bytes {main} [built]
[./node_modules/@storybook/react/dist/esm/client/preview/config-generated-config-entry.js] 2.99 KiB {main} [built]
+ 1695 hidden modules
ERROR in ./styles/storybook.css (./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js!./styles/storybook.css)
Module build failed (from ./node_modules/postcss-loader/dist/cjs.js):
TypeError: this.getOptions is not a function
at Object.loader (/Users/user-name/Sites/project-name/node_modules/postcss-loader/dist/index.js:40:24)
@ ./styles/storybook.css (./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js!./styles/storybook.css) 2:26-136 53:4-74:5 56:18-128
@ ./.storybook/preview.js
@ ./.storybook/preview.js-generated-config-entry.js
@ multi ./node_modules/@storybook/core-client/dist/esm/globals/polyfills.js ./node_modules/@storybook/core-client/dist/esm/globals/globals.js ./node_modules/webpack-hot-middleware/client.js?reload=true&quiet=false&noInfo=undefined ./storybook-init-framework-entry.js ./node_modules/@storybook/addon-essentials/node_modules/@storybook/addon-docs/dist/esm/frameworks/common/config.js-generated-config-entry.js ./node_modules/@storybook/addon-essentials/node_modules/@storybook/addon-docs/dist/esm/frameworks/react/config.js-generated-config-entry.js ./node_modules/@storybook/react/dist/esm/client/preview/config-generated-config-entry.js ./node_modules/@storybook/addon-links/dist/esm/preset/addDecorator.js-generated-config-entry.js ./node_modules/@storybook/addon-actions/dist/esm/preset/addDecorator.js-generated-config-entry.js ./node_modules/@storybook/addon-actions/dist/esm/preset/addArgs.js-generated-config-entry.js ./node_modules/@storybook/addon-backgrounds/dist/esm/preset/addDecorator.js-generated-config-entry.js ./node_modules/@storybook/addon-backgrounds/dist/esm/preset/addParameter.js-generated-config-entry.js ./node_modules/@storybook/addon-measure/dist/esm/preset/addDecorator.js-generated-config-entry.js ./node_modules/@storybook/addon-outline/dist/esm/preset/addDecorator.js-generated-config-entry.js ./.storybook/preview.js-generated-config-entry.js ./generated-stories-entry.js
Child HtmlWebpackCompiler:
Asset Size Chunks Chunk Names
__child-HtmlWebpackPlugin_0 6.27 KiB HtmlWebpackPlugin_0 HtmlWebpackPlugin_0
Entrypoint HtmlWebpackPlugin_0 = __child-HtmlWebpackPlugin_0
[./node_modules/html-webpack-plugin/lib/loader.js!./node_modules/@storybook/core-common/dist/cjs/templates/index.ejs] 2.04 KiB {HtmlWebpackPlugin_0} [built]
ModuleBuildError: Module build failed (from ./node_modules/postcss-loader/dist/cjs.js):
TypeError: this.getOptions is not a function
at Object.loader (/Users/user-name/Sites/project-name/node_modules/postcss-loader/dist/index.js:40:24)
at /Users/user-name/Sites/project-name/node_modules/@storybook/builder-webpack4/node_modules/webpack/lib/NormalModule.js:316:20
at /Users/user-name/Sites/project-name/node_modules/@storybook/builder-webpack4/node_modules/loader-runner/lib/LoaderRunner.js:367:11
at /Users/user-name/Sites/project-name/node_modules/@storybook/builder-webpack4/node_modules/loader-runner/lib/LoaderRunner.js:233:18
WARN Broken build, fix the error above.
WARN You may need to refresh the browser.
System
Environment Info:
System:
OS: macOS 12.3
CPU: (8) arm64 Apple M1 Pro
Binaries:
Node: 16.14.2 - ~/.nvm/versions/node/v16.14.2/bin/node
Yarn: 1.22.17 - ~/.nvm/versions/node/v17.3.1/bin/yarn
npm: 8.5.0 - ~/.nvm/versions/node/v16.14.2/bin/npm
Browsers:
Chrome: 99.0.4844.83
Firefox: 98.0.1
Safari: 15.4
npmPackages:
@storybook/addon-actions: ^6.4.13 => 6.4.13
@storybook/addon-docs: ^6.4.13 => 6.4.18
@storybook/addon-essentials: ^6.4.13 => 6.4.13
@storybook/addon-links: ^6.4.13 => 6.4.13
@storybook/addon-postcss: ^2.0.0 => 2.0.0
@storybook/builder-webpack5: ^6.4.13 => 6.4.13
@storybook/manager-webpack5: ^6.4.13 => 6.4.13
@storybook/react: ^6.4.13 => 6.4.13
storybook-addon-swc: ^1.1.1 => 1.1.1