- Published on
Vue + Typescript 환경에서 Storybook 사용하기
Storybook은 App과 독립적인 환경에서 UI 컴포넌트를 개발할 수 있는 환경을 제공해준다.
컴포넌트 각각 독립적으로 개발하기 때문에 다른 코드와의 Coupling을 낮출 수 있고, 컴포넌트를 더욱 체계적으로 설계할 수 있다.
Storybook은 React, Vue, Angular 등 다양한 Library를 지원하고, 여기서는 그 중 Typescript로 작성한 Vue 컴포넌트를 테스트하는 방법에 대하여 정리하였다.
1. 필요한 package를 설치한다.
- npm install @storybook/vue babel-preset-vue fork-ts-checker-webpack-plugin
"@storybook/vue": "^5.2.6",
"babel-preset-vue": "^2.0.2",
"fork-ts-checker-webpack-plugin": "^3.1.1",
2. Storybook config 와 webpack.config 를 작성한다.
-
/.storybook directory를 만든다.
-
/.storybook/config.js 를 작성한다.
import { configure } from '@storybook/vue';
// automatically import all files ending in *.stories.ts
const req = require.context('../src/stories', true, /.stories.ts$/);
function loadStories() {
req.keys().forEach((filename) => req(filename));
}
configure(loadStories, module);
- /.storybook/webpack.config.js 를 작성한다.
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
module.exports = async ({ config, mode }) => {
config.resolve.extensions.push('.ts', '.tsx', '.vue', '.css', '.less', '.scss', '.sass', '.html');
config.module.rules.push({
test: /\.ts$/,
exclude: /node_modules/,
use: [
{
loader: 'ts-loader',
options: {
appendTsSuffixTo: [/\.vue$/],
transpileOnly: true, // used with ForkTsCheckerWebpackPlugin
},
},
],
});
config.module.rules.push({
test: /\.less$/,
loaders: ['style-loader', 'css-loader', 'less-loader'],
});
config.plugins.push(new ForkTsCheckerWebpackPlugin());
return config;
};
3. Vue 컴포넌트 테스트를 위한 stories 코드를 작성한다.
-
/src/stories 폴더를 만든다.
-
/src/stories/index.stories.ts 를 작성한다.
import { storiesOf } from '@storybook/vue';
import HelloWorld from '../components/HelloWorld.vue';
storiesOf('HelloWorld', module).add('simple', () => ({
components: { HelloWorld },
template: `<HelloWorld msg="Welcome to Your Vue.js + TypeScript + Storybook App"/>`,
}));
4. package.json에 command를 작성한다.
- package.json
{
"scripts": {
"storybook": "start-storybook"
}
}
- npm run storybook