创建vue3项目及配置

463 阅读4分钟

一、创建项目

方式一:使用vite

1、全局安装vite

npm install -g create-vite-app

2、使用vite安装vue3项目

npm init vite-app project_name (project_name为项目名)

3、安装依赖

cd project_name // 进入项目目录

npm install // 安装依赖

4、安装完成,运行

方式二:使用脚手架(@vue/cli 4.5.0+)

1、 安装或升级脚手架 npm install -g @vue/cli

2、需保证 vue cli 版本在 4.5.0 以上

  // 查看版本 vue -V

3、创建项目

  vue create project_name

4、安装完成,运行

二、引入路由vue-router

1、安装路由

npm install vue-router --save

2、在项目中创建路由模块

1、在src目录下创建router文件夹且创建index.js文件
import { createRouter, createWebHistory, createWebHashHistory } from "vue-router"
const routes = [
  { path: '/', redirect: '/home' },
  { path: '/home', component: () => import('../components/HelloWorld.vue') }
]
const router = createRouter({
  history: createWebHashHistory(),// hash模式:createWebHashHistory history模式:createWebHistory
  routes
})

export default router
2、在main.js中引入路由文件index.js
import { createApp } from 'vue'
import App from './App.vue'
import './index.css'
import router from './router/index.js'

const app = createApp(App) // 创建实例

app.use(router)

app.mount('#app')
3、在App.vue中添加如下代码
<template>
  <router-view></router-view>
</template>

<script>

export default {
  name: 'App',
  components: {
  }
}
</script>

三、配置路由别名

1、cli方式:

在根目录创建 vue.config.js 文件
const path = require('path');
function resolve(dir) {
  // 设置绝对路径
  return path.join(__dirname, dir)
}

module.exports = {
  chainWebpack: (config) => {
    config.resolve.alias
      // set(别名, 路径)
      .set('@', resolve('./src'))
  }
}

2、vite方式:(版本号:^2.5.10)

1、安装 @vitejs/plugin-vue 插件
cnpm install @vitejs/plugin-vue --save-dev
2、在根目录创建 vite.config.js 文件
// vite.config.js/ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
const path = require('path')

function _resolve (dir) {
  return path.resolve(__dirname, dir);
}

export default defineConfig({
  resolve: {
    alias: {
      '@': _resolve('src')
    }
  },
  plugins: [vue()]
})

四、其他配置

1、服务器主机名、端口号、

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

export default defineConfig({
  plugins: [vue()],
  server: {
    host: '192.168.1.79', // 指定服务器主机名
    port: 8080, // 指定服务器端口
    open: true, // 在服务器启动时自动在浏览器中打开应用程序 
    https: false, // 是否开启 https
  },
})

2、配置代理(跨域)

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

export default defineConfig({
  plugins: [vue()],
  server: {
    proxy: {
      "/api": {
        target: 'http://localhost:9000', // 所要代理的目标地址
        rewrite: path => path.replace(/^\/api/, ''), // 重写路径
        changeOrigin: true,
      },
    }
  },
})

3、配置打包路径、分块打包

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

export default defineConfig({
  plugins: [vue()],
  //base: '/',//打包路径
  base: '/prject/',//打包路径
  build: {
    rollupOptions: {
      output: {
        chunkFileNames: 'static/js/[name]-[hash].js',
        entryFileNames: 'static/js/[name]-[hash].js',
        assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
      }
    }
  }
})

4、静态资源拆分打包,避免打包在一个文件里面导致文件过大

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

export default defineConfig({
  plugins: [vue()],
  build: {
    rollupOptions: {
      output: {
        manualChunks (id) {
          if (id.includes('node_modules')) {
            return id.toString().split('node_modules/')[1].split('/')[0].toString();
          }
        }
      }
    }
  }
})

5、gzip静态资源压缩

cnpm i vite-plugin-compression --save-dev
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
    plugins: [vue()],
    viteCompression({
      verbose: true,
      disable: false,// 不禁用压缩
      deleteOriginFile: false, // 压缩后是否删除原文件
      threshold: 10240,//大于10kb就压缩
      algorithm: 'gzip',// 压缩算法
      ext: '.gz',// 文件类型
    }),
})

6、清除console和debugger

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

export default defineConfig({
    plugins: [vue()],
    build: {
     terserOptions: {
      compress: {
        drop_console: true,
        drop_debugger: true,
      },
    },
  }
})

7、IE和旧版chrome兼容

cnpm i @vitejs/plugin-legacy -d--save
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import legacyPlugin from '@vitejs/plugin-legacy'

export default defineConfig({
    plugins: [
      vue(),
      legacyPlugin({
        targets: ['chrome 52'], // 需要兼容的目标列表,可以设置多个
        additionalLegacyPolyfills: ['regenerator-runtime/runtime'] // 面向IE11时需要此插件
      })
    ],
})

五、vue api 自动导入

cnpm i -d--save unplugin-auto-import

vite.config.js

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from "unplugin-auto-import/vite"

export default defineConfig({
    plugins: [
      vue(),
      AutoImport({
        // 自动导入vue相关的Api
        imports: ["vue",'vue-router',axios], // 也支持vue-router、axios等
        // 声明文件的存放位置
        dts: 'auto-imports.d.ts',
      }),
    ],
})

六、按需引入element-plus

cnpm i -d--save unplugin-auto-import
npm i -d--save unplugin-vue-components

vite.config.js

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from "unplugin-auto-import/vite"
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';

export default defineConfig({
    plugins: [
      vue(),
      AutoImport({
        resolvers: [ElementPlusResolver()],
      }),
      Components({
        resolvers: [ElementPlusResolver()],
      }),
    ],
})

七、安装使用less

"less": "^4.1.2", "less-loader": "^10.2.0",

cnpm install less --save-d
cnpm install less-loader --save-d
配置全局样式

vite.config.js

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
const path = require('path')

export default defineConfig({
    plugins: [vue()],
    css: {
    preprocessorOptions: {
      less: {
        javascriptEnabled: true,
        additionalData: `@import "${path.resolve(__dirname, 'src/assets/style/less/global.less')}";`
      }
    }
  }
})

src/assets/style/less/global.less

@color:red;

.font30{
  font-size: 30px;
}


////////使用
<style scoped lang="less">
p {
  color: @color;
  .font30();
  code {
    color: black;
  }
}
</style>

八、安装使用scss

"sass": "^1.51.0", "sass-loader": "^12.6.0",

cnpm install sass --save-d
cnpm install sass-loader --save-d
配置全局样式

vite.config.js

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
const path = require('path')

function _resolve (dir) {
  return path.resolve(__dirname, dir);
}

export default defineConfig({
    plugins: [vue()],
    resolve: {
      alias: {
        '@': _resolve('src')
      }
    },
    css: {
      preprocessorOptions: {
        scss: {
          javascriptEnabled: true,
          additionalData: `@import "@/assets/style/scss/global.scss";`
        }
      }
    }
  }
})

src/assets/style/scss/global.scss

$color:red;
.font30{
  font-size: 30px;
}


////////使用
<style scoped lang="less">
p {
  color: $color;
}
</style>

九、axios封装

cnpm install axios --save
import axios from 'axios'

axios.defaults.timeout = 15000 // 设置请求超时时间 15s
axios.defaults.baseURL = 'url'; 

// !请求拦截
axios.interceptors.request.use(config => {
  return config
}, (err) => {
  return Promise.reject(err)
})


// !响应拦截
axios.interceptors.response.use(
  async (res) => {
      return res
  },
  (err) => {
    return Promise.reject(err)
  }
)

export { axios }

十、配置环境变量

在根目录创建.env、.env.production、env.development三个文件,文件中的变量必须以VITE_开头才被识别,在package.json中修改配置

"scripts": {
    "dev": "vite --mode development",
    "build": "vite build --mode production"
 },
//.env.development 开发环境
VITE_APP_TITLE=development

//.env.production 正式环境
VITE_APP_TITLE=production

//.env 
VITE_SSO=true

//使用
console.log(import.meta.env)