webpack.config.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. const path = require('path');
  2. const SRC_PATH = path.join(__dirname, '../src');
  3. const STORIES_PATH = path.join(__dirname, '../stories');
  4. module.exports = ({ config }) => {
  5. // don't use storybook's default svg configuration
  6. // https://github.com/storybookjs/storybook/issues/6758
  7. config.module.rules = config.module.rules.map(rule => {
  8. if (rule.test.toString().includes('svg')) {
  9. const test = rule.test.toString().replace('svg|', '').replace(/\//g, '');
  10. return { ...rule, test: new RegExp(test) };
  11. } else {
  12. return rule;
  13. }
  14. });
  15. // ts rules
  16. config.module.rules.push({
  17. test: /\.(ts|tsx)$/,
  18. // dont need stories path if you have your stories inside your src folder
  19. include: [SRC_PATH, STORIES_PATH],
  20. use: [
  21. {
  22. loader: require.resolve('awesome-typescript-loader'),
  23. options: {
  24. configFileName: './.storybook/tsconfig.json'
  25. }
  26. },
  27. { loader: require.resolve('react-docgen-typescript-loader') }
  28. ]
  29. });
  30. config.resolve.extensions.push('.ts', '.tsx');
  31. // svg rules
  32. config.module.rules.push({
  33. // in css files, svg is loaded as a url formatted string
  34. test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
  35. issuer: /\.css$/,
  36. use: {
  37. loader: 'svg-url-loader',
  38. options: { encoding: 'none', limit: 10000 }
  39. }
  40. });
  41. config.module.rules.push({
  42. // in js, jsx, ts, and tsx files svg is loaded as a raw string
  43. test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
  44. issuer: { test: /\.(js|jsx|ts|tsx)$/ },
  45. use: {
  46. loader: 'raw-loader'
  47. }
  48. });
  49. return config;
  50. };