config-overrides.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /* eslint-disable @typescript-eslint/no-var-requires */
  2. const path = require('path')
  3. const {
  4. override,
  5. addBabelPreset,
  6. addBabelPlugin,
  7. addWebpackAlias,
  8. disableEsLint,
  9. addWebpackModuleRule,
  10. } = require('customize-cra')
  11. const eslintConfig = require('./.eslintrc.js')
  12. const modifiedEslintConfig = {
  13. ...eslintConfig,
  14. rules: {
  15. ...eslintConfig.rules,
  16. // mark prettier rule as a warning in config passed to webpack so wrong code formatting won't make dev server fail
  17. 'prettier/prettier': 'warn',
  18. },
  19. }
  20. // based on https://github.com/arackaf/customize-cra/issues/175#issuecomment-610023655
  21. const customEslintConfig = (configRules) => {
  22. if (process.env.CI) {
  23. return disableEsLint()
  24. }
  25. return (config) => {
  26. const updatedRules = config.module.rules.map((rule) => {
  27. // Only target rules that have defined a `useEslintrc` parameter in their options
  28. if (rule.use && rule.use.some((use) => use.options && use.options.useEslintrc !== undefined)) {
  29. const ruleUse = rule.use[0]
  30. const baseOptions = ruleUse.options
  31. const baseConfig = baseOptions.baseConfig || {}
  32. const newOptions = {
  33. useEslintrc: false,
  34. ignore: true,
  35. baseConfig: { ...baseConfig, ...configRules },
  36. }
  37. ruleUse.options = newOptions
  38. return rule
  39. // Rule not using eslint. Do not modify.
  40. } else {
  41. return rule
  42. }
  43. })
  44. config.module.rules = updatedRules
  45. return config
  46. }
  47. }
  48. module.exports = {
  49. webpack: override(
  50. addBabelPlugin('babel-plugin-emotion'),
  51. addBabelPreset('@emotion/babel-preset-css-prop'),
  52. addWebpackAlias({
  53. '@': path.resolve(__dirname, 'src/'),
  54. }),
  55. addWebpackModuleRule({
  56. test: /\.(graphql|gql)$/,
  57. exclude: /node_modules/,
  58. loader: 'graphql-tag/loader',
  59. }),
  60. customEslintConfig(modifiedEslintConfig)
  61. ),
  62. paths: (paths) => {
  63. paths.appBuild = path.resolve(__dirname, 'dist')
  64. return paths
  65. },
  66. jest: function (config) {
  67. config.coverageDirectory = path.resolve(__dirname, '..', '..', '.coverage')
  68. // Don't collect coverage from stories folder
  69. config.collectCoverageFrom.push('!<rootDir>/src/**/stories/**/*.{js,jsx,ts,tsx}')
  70. return config
  71. },
  72. }