vite

初始化一个项目:react vue
npm init @vitejs/app

main.ts


<script setup lang="ts">
import HelloWorld from "./components/about/index/HelloWorld.vue"
import AL from "comp/HelloWorld.vue"

<template>
    <img alt="Vue logo" src="./assets/image/icon/logo.png" >
    <HelloWorld msg="Hello Vue3 +TypeScript +Vite" />
    <img src="/icon/logo.png" alt="" srcset="" >
    <AL msg="Hello Vue3 + TypeScript +Vite" />
</template>
</script>

vite.config.ts


import { resolve } from 'path'
//https://vitejs.dev/config/
export default defineConfig({
    base:"./",
    plugins:[vue()],
    resolve:{
        alias:{
            comp:resolve(__dirname,'src/coponents/about/index'),
            '/icon':'./src/assets/image/icon',
        },
    },
    build:{
        minify: 'terser',
        terserOptions:{
            cimpress:{
                //生产环境时移除console
                drop_console:true,
                drop_debugger:true,
            }
        }
    }
})


element按需导入

https://element-plus.gitee.io/zh-CN/guide/quickstart.html#按需导入
npm isntall -D unplugin-vue-components unplugin-auto-import 

vite-plugin-cdn-import

https://github.com/MMF-FE/vite-plugin-cdn-import

image

image

npm create vite

vue3 @vitejs/plugin-vue

vue2 underfin/vite-plugin-vue2

vue3jsx @vitejs/plugin-vue-jsx

base

alias

"/images":"..."

build

terserOptions

        minify: 'terser',
        terserOptions: {
            compress: {
                //生产环境时移除console
                drop_console: true,
                drop_debugger: true,
            },
        },


rollupOptions

          output: {
               chunkFileNames: 'static/js/[name]-[hash].js',
               entryFileNames: 'static/js/[name]-[hash].js',
               assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
           },

plugin

element-plus

mock

npm i vite-plugin-mock mockjs  -D

server

    server: {
        proxy: {
            '/ss': {
                target: 'https://saucenao.com/search.php?db=999&output_type=2&url=https://pica.zhimg.com/v2-178387c7e8e907910d715e890bfd7519_1440w.jpg?source=172ae18b&api_key=33d4bee5c19583cd3756ee47f2ebef8edd5bef7e',
                changeOrigin: true,
                rewrite: (path) => path.replace(/^\/ss/, ''),
            },
        },
    },

.env.production

VITE_BASE_API=/api

VITE_BASE_API=https://www.manga2020.com/api/v3/comic/hydxjxrwgb/chapter/cb321fca-c608-11e8-879b-024352452ce0?timeout=10000

CDN

npm install vite-plugin-cdn-import --save-dev

代码压缩

npm i vite-plugin-compression -D

        viteCompression({
            //生成压缩包gz
            verbose: true,
            disable: false,
            threshold: 10240,
            algorithm: 'gzip',
            ext: '.gz',
        }),

打包图片

cnpm i vite-plugin-imagemin@0.4.6 -D

        viteImagemin({
            gifsicle: {
                optimizationLevel: 7,
                interlaced: false,
            },
            optipng: {
                optimizationLevel: 7,
            },
            mozjpeg: {
                quality: 50,
            },
            pngquant: {
                quality: [0.8, 0.9],
                speed: 4,
            },
            svgo: {
                plugins: [
                    {
                        name: 'removeViewBox',
                    },
                    {
                        name: 'removeEmptyAttrs',
                        active: false,
                    },
                ],
            },
        }),

格式化

npm i eslint prettier @typescript-eslint/eslint-plugin  @typescript-eslint/parser @vue/eslint-config-prettier @vue/eslint-config-typescript  babel-eslint eslint-config-prettier  eslint-plugin-prettier eslint-plugin-vue -D

module.exports = {
    root: true,
    env: {
        browser: true,
        node: true,
        es6: true,
    },
    extends: [
        'plugin:vue/vue3-essential',
        'eslint:recommended',
        '@vue/typescript/recommended',
        '@vue/prettier',
        // '@vue/prettier/@typescript-eslint',
    ],
    parserOptions: {
        ecmaVersion: 2020,
        sourceType: 'module',
    },
    rules: {
        'prettier/prettier': 'error',
        '@typescript-eslint/no-explicit-any': ['off'],
        '@typescript-eslint/indent': ['off'],
        '@typescript-eslint/no-unused-vars': ['error'],
    },
    globals: {
        defineProps: 'readonly',
        defineEmits: 'readonly',
        defineComponent: 'readonly',
        defineExpose: 'readonly',
    },
}

module.exports = {
    printWidth: 80,
    tabWidth: 4,
    useTabs: false,
    singleQuote: true,
    semi: false,
    trailingComma: 'es5',
    bracketSpacing: true,
    jsxBracketSameLine: false,
    arrowParens: 'avoid',
    endOfLine: 'auto',
}
Last Updated:
Contributors: 刘荣杰