webpack devServer에서 mock-service-worker 사용하기
msw 공식문서가 친절해서 그대로 따라하면 된다.
Install
npm install msw --save-dev
Mock definition
폴더네이밍은 자유로 mocks 라는 폴더를 만들어서 handler.js를 아래와 같이 생성했다.
import { rest } from 'msw';
export const handlers = [
rest.get('/api/test', (req, res, ctx) => {
return res(
ctx.status(200),
ctx.json({
data: 'test'
})
);
})
];
Setup
npx msw init <PUBLIC_DIR> --save
위 명령어를 실행하여 mockServiceWorker.js를 <PUBLIC_DIR>에 생성한다.
<PUBLIC_DIR>이 중요한데 mockServiceWorker.js 파일이 서버가 실행되었을때
root path에서 접근이 가능한 경로에 있어야한다.
쉽게 말하자면 127.0.0.1:3000/mockServiceWorker.js
로 리소스를 가져오도록 세팅해야 한다는 말이다.
그래서 나는 npx msw init mock --save를 실행해주고
devServer.contentBase에 mock 디렉토리를 지정해 주었다.
여기서 헷갈렸던 webpack 세팅을 잠시 정리..
-
output.publicPath
리소스가 제공 될 웹 서버의 디렉토리 라고 생각하면 된다.
output.publicPath가/dist/
라고 지정되어있고 HtmlWebpackPlugin을 사용한 경우 빌드된 index.html에 import 되는 스크립트의 경로는/dist/
로 시작한다.The webpack-dev-server also takes a hint from publicPath, using it to determine where to serve the output files from.
공식문서에는 위와 같이 설명되어있는데 webpack-dev-server는 output.publicPath에 설정된 path를 통해 wepback 파일을 제공할 위치의 힌트를 얻는다.
devServer에 대한 별다른 설정없이 output.publicPath가
/dist/
인경우
webpack-dev-server를 실행하면127.0.0.1:3000/dist
로 접근해야 하는점에 유의해야한다.
-
devServer.contentBase
정적리소스의 경로를 설정한다.
즉 웹팩에서 제공하지 않는 파일은 설정된 경로에서 찾겠다는 뜻이다. -
devServer.publicPath
devServer가 wepback 파일을 제공할 위치이다.
devServer.publicPath에 설정된 값이 없다면 기본은/
지만
위에 말한대로 output.publicPath이 설정되어있다면 output.publicPath의 값으로 설정하게 된다.
Configure worker
mocks 폴더내에 browser.js를 만들어서 아래와 같이 작성한다.
import { setupWorker } from 'msw'
import { handlers } from './handlers'
// This configures a Service Worker with the given request handlers.
export const worker = setupWorker(...handlers)
Start worker
entry 파일에 development mode의 경우 worker를 start해주는 코드를 추가한다.
import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
if (process.env.NODE_ENV === 'development') {
const { worker } = require('./mocks/browser')
worker.start()
}
ReactDOM.render(<App />, document.getElementById('root'))
적용 확인
console에 아래와같이 뜬다면 세팅이 완료된것이다.
api테스트도 아래와 같이 뜬다면 성공!
Author And Source
이 문제에 관하여(webpack devServer에서 mock-service-worker 사용하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ziyoonee/webpack-devServer에서-mock-service-worker-사용하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)