카테고리 없음
vue.config.js
이채야채
2025. 2. 13. 11:22
vue.config.js는 vue내부에서 언제 실행되나요?
- vue-cli-service가 실행될 때 초기 단계에서 로드됩니다.
- vue-cli-service serve (개발 서버 실행) 또는 vue-cli-service build (빌드 실행) 시 vue.config.js를 읽어 Webpack 및 기타 툴의 설정을 동적으로 변경합니다.
- vue.config.js는 Vue 프레임워크의 런타임이 아니라 빌드 타임에서 실행되며, Webpack을 포함한 빌드 프로세스의 일부로 동작합니다.
vue-cli-service란 무엇인가요
- vue-cli-service는 Vue CLI(@vue/cli)에 의해 설치되는 패키지로, Vue 프로젝트를 실행, 빌드, 테스트, 배포하는 데 사용됩니다.
- Vue 프레임워크 자체(vue 패키지)에는 포함되지 않으며, Vue 프로젝트를 편리하게 관리하기 위한 빌드 도구입니다.
- Webpack, Babel, ESLint 등의 빌드 관련 툴을 자동으로 설정하고, 필요에 따라 사용자 정의 설정을 반영할 수 있습니다.
결론:
- vue-cli-service는 Vue 프레임워크 내부에 존재하는 것이 아니라, Vue CLI(@vue/cli)의 일부로 제공되는 독립적인 빌드 및 개발 도구입니다.
- Vue 프로젝트를 실행, 빌드, 테스트하기 위해 사용되며, vue.config.js를 통해 Webpack 설정을 조정할 수 있습니다.
- Vue 프레임워크(vue 패키지)와는 별개이며, Vue의 UI 렌더링이나 반응형 시스템을 담당하는 것이 아니라, Vue 프로젝트의 개발 및 빌드 환경을 관리하는 역할을 합니다.
vue.config.js의 샘플을 통해서 설정을 알아봅시다.
const { defineConfig } = require("@vue/cli-service");
const NodePolyfillPlugin = require("node-polyfill-webpack-plugin");
const API_IP = "10.30.200.15";
const API_PORT = "8090";
module.exports = defineConfig({
transpileDependencies: true,
configureWebpack: {
plugins: [new NodePolyfillPlugin()],
},
chainWebpack: (config) => {
config.plugin("html").tap((args) => {
args[0].title = "Laon Sentinel";
return args;
});
},
devServer: {
proxy: {
"/api": {
target: `http://${API_IP}:${API_PORT}/api/test`,
changeOrigin: true,
pathRewrite: {
"^/api": "",
},
},
"/prod": {
target: "http://10.30.8.12:10000/api/v1/sentinel",
changeOrigin: true,
pathRewrite: {
"^/prod": "",
},
},
},
},
css: {
loaderOptions: {
sass: {
additionalData: `@import "@/assets/scss/abstracts/variable";`,
},
},
},
});
1. 기본 설정 및 플러그인
const { defineConfig } = require("@vue/cli-service");
const NodePolyfillPlugin = require("node-polyfill-webpack-plugin");
- defineConfig : Vue CLI 4.5 이상에서 defineConfig를 사용하면 자동 완성 및 타입 지원이 향상됩니다.
- NodePolyfillPlugin : Node.js의 일부 내장 모듈(fs, path, crypto 등)을 브라우저에서 사용할 수 있도록 Webpack에 폴리필(polyfill)을 추가하는 플러그인입니다. 이를 통해 브라우저 환경에서도 일부 Node.js API를 사용할 수 있습니다.
2. API 서버 IP 및 포트 정의
const API_IP = "10.30.200.15";
const API_PORT = "8090";
- API 서버의 기본 IP와 포트를 정의하는 상수입니다.
- 이후 devServer.proxy에서 이 값을 사용하여 API 요청을 프록시할 때 활용됩니다
3. module.exports 내 설정
module.exports = defineConfig({
- defineConfig를 사용하여 Vue CLI 서비스의 설정을 정의합니다.
defineConfig를 사용하여 Vue CLI 서비스의 설정을 정의합니다.
4. transpileDependencies: true
transpileDependencies: true,
- Babel이 node_modules 안의 일부 패키지를 트랜스파일하도록 설정하는 옵션입니다.
- 보통 ES6+로 작성된 외부 라이브러리가 IE11 같은 구형 브라우저에서 실행되지 않을 경우, 이 옵션을 사용하여 트랜스파일할 수 있습니다.
5. configureWebpack 설정
configureWebpack: {
plugins: [new NodePolyfillPlugin()],
},
- Webpack 설정을 직접 수정하는 옵션입니다.
- NodePolyfillPlugin 플러그인을 추가하여 브라우저 환경에서도 일부 Node.js 모듈을 사용할 수 있도록 설정합니다.
6. chainWebpack 설정 (HTML 타이틀 변경)
chainWebpack: (config) => {
config.plugin("html").tap((args) => {
args[0].title = "Laon Sentinel";
return args;
});
},
- chainWebpack은 Webpack의 설정을 체인 형태로 수정할 수 있도록 합니다.
- 여기서는 Vue 프로젝트에서 index.html을 생성하는 HTMLWebpackPlugin의 설정을 수정하여, 브라우저 탭에 표시될 기본 타이틀(title) 을 "Laon Sentinel"로 변경합니다.
7. devServer 설정 (API 프록시)
devServer: {
proxy: {
"/api": {
target: `http://${API_IP}:${API_PORT}/api/test`,
changeOrigin: true,
pathRewrite: {
"^/api": "",
},
},
"/prod": {
target: "http://10.30.8.12:10000/api/v1/sentinel",
changeOrigin: true,
pathRewrite: {
"^/prod": "",
},
},
},
},
- 개발 서버(vue-cli-service serve) 실행 시 프록시(proxy) 설정을 적용하여, 특정 경로(/api, /prod)로 요청을 보낼 때 API 서버로 리다이렉트합니다.
- proxy 설정의 각 속성 설명:
- "/api" : API 요청을 로컬 개발 서버(localhost:8080)가 아니라 실제 API 서버 (http://${API_IP}:${API_PORT}/api/test)로 보냄.
- target : 요청을 보낼 실제 API 서버의 주소.
- changeOrigin: true : 브라우저에서 요청할 때 CORS 문제를 방지하기 위해 origin을 변경함.
- pathRewrite : 프록시 요청 시 경로 변경 (/api를 빈 문자열로 변환하여 실제 API 요청에서 /api를 제거).
- 클라이언트에서 http://localhost:8080/api/users 요청 → http://10.30.200.15:8090/api/test/users로 변환되어 전송됨.
- /prod도 같은 방식으로 http://10.30.8.12:10000/api/v1/sentinel로 라우팅됨.
이 설정을 통해:
- 개발 환경에서 API 요청이 자동으로 서버로 프록시되고,
- 프로젝트의 index.html 타이틀이 "Laon Sentinel"로 설정되며,
- SCSS 전역 변수를 추가하는 등의 편리한 기능을 활용할 수 있습니다.