Intro.
각 번들에 해시값을 명시하여 사용할 경우, 매 빌드 혹은 dev server를 통한 live / hot reload기능을 사용할 경우, 굉장히 많은 양의 레거시 파일들이 생성됩니다. 당연하지만 매번 손수 삭제하긴 상당히 귀찮기에, 몇몇 설정을 통해 간단히 해결 가능합니다.
Goal
Method 1 (내장 모듈 사용하기)
1. config 파일 output에, clean 프로퍼티를 명시합니다.
module: {
rules: [
{
test: /\.html$/,
use: [
{
loader: 'html-loader'
}
]
}
]
},
output: {
path: path.resolve(__dirname, '../dist')
clean: true
},
clean 프로퍼티에 오브젝트 객체를 할당할 수 있습니다.
- dry [boolean? = false] : true시, 빌드마다 타깃 파일들을 삭제하지 않고 콘솔에 출력합니다 (삭제 대상 출력)
- keep [string?]: regex, 조건을 만족하는 파일들을 삭제 대상에서 배제합니다. ex) /\.png$/
단, 이 방법으로 하면 dev-server사용 시, 작동을 안하는 버그가 있습니다.
https://github.com/webpack/webpack-dev-middleware/issues/861 (2년째 픽스 안되고 있네요..)
따라서, clean-webpack-plugin의 도움을 받아 해당 문제를 해결합니다.
Method 2 (clean-webpack-plugin)
1. clean-webpack-plugin 설치합니다.
yarn add -D clean-webpack-plugin
2. config 파일 / plugins 배열에 해당 모듈을 추가합니다. (기본적으로 하는 동작은 output.clean과 동일합니다)
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
plugins: [
....,
new CleanWebpackPlugin()
]
// 당연하지만 빌드 이전에 이전 빌드 결과를 지우고 싶으므로, 맨 마지막 인덱스에 해당 플러그인을 배치합니다.
현재 저는 '/dist'가 기본 경로로 되어있는데, 만약 외부 경로에 빌드 시, 삭제하고 싶은 디렉토리가 있다면, 다음과 같은 옵션을 주어 삭제 가능합니다.
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
plugins: [
....,
new CleanWebpackPlugin({
// dry : true, output.dry와 동일
// verbose: true, 과정에 대한 로그 작성
cleanOnceBeforeBuildPatterns: [path.join(process.cwd(), 'path to clean'],
dangerouslyAllowCleanPatternsOutsideProject: true,
})
]
cleanOnceBeforeBuildPatterns : (default)['**/*']
- 배열 요소에 !<- 표기를 통해 삭제 대상에서 제외 가능합니다. ex) cleanOnceBeforeBuildPatterns:['**/*','!assets/**/*']
https://www.npmjs.com/package/clean-webpack-plugin
clean-webpack-plugin
A webpack plugin to remove/clean your build folder(s).. Latest version: 4.0.0, last published: 2 years ago. Start using clean-webpack-plugin in your project by running `npm i clean-webpack-plugin`. There are 3234 other projects in the npm registry using cl
www.npmjs.com
'Bundler' 카테고리의 다른 글
[Webpack] 전처리기 사용하기 + vendor prefix ( scss, less ,postCSS ) (0) | 2023.04.25 |
---|---|
[Webpack] CSS Module 번들링 (0) | 2023.04.24 |
[Webpack] 빌드 시 하위 경로 생성하기 (0) | 2023.04.24 |
[Webpack] 동적으로 HTML 생성하기 (HTMLWebpackPlugin) (0) | 2023.04.24 |
[Webpack] CSS 파일 메인 번들과 분리시키기 (MiniCssExtractPlugin) (0) | 2023.04.24 |