기본 설정 정보
- 프런트앤드 프로젝트를 신규 생성했을때 기본적인 설정 내용을 정리한 문서
/// <reference types="@vitest/browser/providers/playwright" />/// <reference types="vitest/config" />import {defineConfig} from 'vite'import react from '@vitejs/plugin-react-swc'import tailwindcss from '@tailwindcss/vite'import tsconfigPaths from 'vite-tsconfig-paths'import svgrPlugin from 'vite-plugin-svgr'
// https://vite.dev/config/import path from 'path'import {fileURLToPath} from 'node:url'import {storybookTest} from '@storybook/addon-vitest/vitest-plugin'const dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url))
// More info at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addonexport default defineConfig({ plugins: [ react(), tailwindcss(), tsconfigPaths(), svgrPlugin({ // A minimatch pattern, or array of patterns, which specifies the files in the build the plugin should include. include: '**/*.svg?react', }), ], test: { projects: [ { extends: true, plugins: [ // The plugin will run tests for the stories defined in your Storybook config // See options at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon#storybooktest storybookTest({ configDir: path.join(dirname, '.storybook'), }), ], resolve: { alias: { '@': path.resolve(__dirname, './src'), }, }, test: { name: 'storybook', browser: { enabled: true, headless: true, provider: 'playwright', instances: [ { browser: 'chromium', }, ], }, setupFiles: ['.storybook/vitest.setup.ts'], }, }, ], },}){ "compilerOptions": { "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", "target": "ES2022", "useDefineForClassFields": true, "lib": ["ES2022", "DOM", "DOM.Iterable"], "module": "ESNext", "skipLibCheck": true,
/* Bundler mode */ "moduleResolution": "bundler", "allowImportingTsExtensions": true, "verbatimModuleSyntax": true, "moduleDetection": "force", "noEmit": true, "jsx": "react-jsx",
/* Linting */ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, "erasableSyntaxOnly": false, "noFallthroughCasesInSwitch": true, "noUncheckedSideEffectImports": true,
/* path */ "baseUrl": ".", "paths": { "@/*": ["./src/*"] } }, "include": ["src"]}{ "compilerOptions": { "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", "target": "ES2023", "lib": ["ES2023"], "module": "ESNext", "skipLibCheck": true,
/* Bundler mode */ "moduleResolution": "bundler", "allowImportingTsExtensions": true, "verbatimModuleSyntax": true, "moduleDetection": "force", "noEmit": true,
/* Linting */ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, "erasableSyntaxOnly": false, "noFallthroughCasesInSwitch": true, "noUncheckedSideEffectImports": true }, "include": ["vite.config.ts"]}{ "files": [], "references": [{"path": "./tsconfig.app.json"}, {"path": "./tsconfig.node.json"}]}// For more info, see https://github.com/storybookjs/eslint-plugin-storybook#configuration-flat-config-formatimport storybook from 'eslint-plugin-storybook'
import js from '@eslint/js'import globals from 'globals'import reactHooks from 'eslint-plugin-react-hooks'import reactRefresh from 'eslint-plugin-react-refresh'import tseslint from 'typescript-eslint'import {globalIgnores} from 'eslint/config'
export default tseslint.config( [ globalIgnores(['dist', 'src/**/*.stories.tsx', 'storybook-static', 'vite.config.ts']), { files: ['**/*.{ts,tsx}'], extends: [ js.configs.recommended, tseslint.configs.recommended, reactHooks.configs['recommended-latest'], reactRefresh.configs.vite, ], languageOptions: { ecmaVersion: 2020, globals: globals.browser, }, rules: { 'no-debugger': ['error'], 'no-var': ['error'], 'no-multiple-empty-lines': ['error'], eqeqeq: ['error'], 'dot-notation': ['error'], 'react-refresh/only-export-components': ['warn', {allowConstantExport: true}], 'no-unused-expressions': 'off', }, }, ], storybook.configs['flat/recommended'],)module.exports = { bracketSpacing: false, singleQuote: true, trailingComma: 'all', arrowParens: 'always', semi: false, printWidth: 90, tabWidth: 2, useTabs: true, endOfLine: 'lf', plugins: ['prettier-plugin-tailwindcss'],}import type {StorybookConfig} from '@storybook/react-vite'
const config: StorybookConfig = { stories: [ '../src/stories/document/intro.mdx', '../src/stories/document/**/*.mdx', '../src/stories/document/**/*.stories.@(ts|tsx)', ], addons: [ '@chromatic-com/storybook', '@storybook/addon-docs', '@storybook/addon-a11y', '@storybook/addon-vitest', ], framework: { name: '@storybook/react-vite', options: {}, },}export default configimport type {Preview} from '@storybook/react-vite'import '../src/index.css'
const preview: Preview = { parameters: { controls: { matchers: { color: /(background|color)$/i, date: /Date$/i, }, },
a11y: { // 'todo' - show a11y violations in the test UI only // 'error' - fail CI on a11y violations // 'off' - skip a11y checks entirely test: 'todo', }, },}
export default previewimport * as a11yAddonAnnotations from '@storybook/addon-a11y/preview'import {setProjectAnnotations} from '@storybook/react-vite'import * as projectAnnotations from './preview'
// This is an important step to apply the right configuration when testing your stories.// More info at: https://storybook.js.org/docs/api/portable-stories/portable-stories-vitest#setprojectannotationssetProjectAnnotations([a11yAddonAnnotations, projectAnnotations])