webpack.config.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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
  10. .toString()
  11. .replace('svg|', '')
  12. .replace(/\//g, '');
  13. return { ...rule, test: new RegExp(test) };
  14. } else {
  15. return rule;
  16. }
  17. });
  18. // ts rules
  19. config.module.rules.push({
  20. test: /\.(ts|tsx)$/,
  21. // dont need stories path if you have your stories inside your src folder
  22. include: [SRC_PATH, STORIES_PATH],
  23. use: [
  24. {
  25. loader: require.resolve('awesome-typescript-loader'),
  26. options: {
  27. configFileName: './.storybook/tsconfig.json'
  28. }
  29. },
  30. { loader: require.resolve('react-docgen-typescript-loader') }
  31. ]
  32. });
  33. config.resolve.extensions.push('.ts', '.tsx');
  34. // svg rules
  35. config.module.rules.push({
  36. // in css files, svg is loaded as a url formatted string
  37. test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
  38. issuer: { test: /\.css$/ },
  39. use: {
  40. loader: 'svg-url-loader',
  41. options: { encoding: 'none', limit: 10000 }
  42. }
  43. });
  44. config.module.rules.push({
  45. // in js, jsx, ts, and tsx files svg is loaded as a raw string
  46. test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
  47. issuer: { test: /\.(js|jsx|ts|tsx)$/ },
  48. use: {
  49. loader: 'raw-loader'
  50. }
  51. });
  52. return config;
  53. };