본문 바로가기

웹 개발/Vue.js

Vue.js) vue-cli → vite 변환 작업

1. vite 설치

$ npm install -D vite 

devDependencies에 넣기

2. 불필요한 의존성 삭제

  1. babel 관련 패키지
  2. vue-cli 관련 패키지
    • @vue/cli-plugin-babel
    • @vue/cli-plugin-eslint
    • @vue/cli-plugin-router
    • @vue/cli-plugin-vuex
    • @vue/cli-service
  3. sass-loader (sass만 있으면 된다)

3. package.json에 스크립트 수정

...
"scripts": {
    "serve": "vite",
    "build:dev": "vite build --mode dev",
    "build:stage": "vite build --mode stage",
    "build": "vite build",
    "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore"
  },
...

4. 프로젝트 루트에 config 파일 추가

jsconfig.json or tsconfig.json

// jsconfig.json
{
  "vueCompilerOptions": {
    "target": 2.7
  }
}
// tsconfig.json

{
  "compilerOptions": {
    "target": "ESNext",
    "useDefineForClassFields": true,
    "module": "ESNext",
    "moduleResolution": "Node",
    "strict": true,
    "jsx": "preserve",
    "sourceMap": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "lib": ["ESNext", "DOM"],
    "skipLibCheck": true,
    "baseUrl": "./",
    "paths": {
      "@/*": ["src/*"],
      "preact/*": ["./stub/empty.d.ts"]
    },
    "noImplicitAny": false,
    "types": [
      "pinia-plugin-persist"
    ]
  },
  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
  "references": [{ "path": "./tsconfig.node.json" }],
}

 

vite.config (.js or .ts)

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue2';
import path from 'path';

export default (async () => {
  try {
    // vite.config.local.js 파일이 존재하면 해당 파일에 설정된 config 설정을 d 사용
    const localViteConfig = await import('./vite.config.local');
    return localViteConfig.default;
  } catch (err) {
    return defineConfig({
      plugins: [vue()],
      resolve: {
        alias: {
          '@': path.resolve(__dirname, './src'),
        },
        extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'],
      },
    });
  }
})();

5. 각종 config.js 파일을 모두 cjs로 바꿔주기

  • package.json에 설정된 type이 module이면 cjs로 해야된다.

6. index 파일 위치 변경

vue-cli는 public 폴더 내에 favicon과 같이 있다. vite는 루트 디렉토리에 넣어야 한다. 그리고 아래 스크립트를 추가해야 한다.

 

 

<script type="module" src="/src/main.js"></script>
<!-- index.html -->

<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="/favicon.ico">
    <title>...</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.js"></script>
    <!-- built files will be auto injected -->
  </body>
</html>

 


References