二、Vue3与element-ui插件集成

1、安装element-ui

npm install element-plus --save

官方网址:https://element-plus.gitee.io/zh-CN

2、添加按钮小图标

npm i @element-plus/icons-vue

如果引入的时候,出现错误,tsconfig.json文件中,修改:

"moduleResolution" 设置为 "node"

3、引入国际化会

import ElementPlus from 'element-plus'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'

app.use(ElementPlus, {
  locale: zhCn,
})

如出现以下问题:

Could not find a declaration file for module 'element-plus/dist/locale/zh-cn.mjs'. 'E:/个人/vue3-template/vite-v3temp/node_modules/element-plus/dist/locale/zh-cn.mjs' implicitly has an 'any' type.
  If the 'element-plus' package actually exposes this module, try adding a new declaration (.d.ts) file containing `declare module 'element-plus/dist/locale/zh-cn.mjs';`

解决办法是在//@ts-ignore

//@ts-ignore
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'

4、src别名的配置

TypeScript编译配置:tsconfig.json

 "compilerOptions": {
 "baseUrl": "./",
    "paths": {
      "@/*":["src/*"]
    }
}

vite.config.ts配置

可能需要安装

//vite.config.ts
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import path from 'path';

export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@':path.resolve('./src')
      }
  }
});

如果path报错的话,需要安装:npm install @types/node

4、添加几个环境测试

.env.development、.env.production、.env.test

模板

# 变量必须以VITE_为前缀暴露给外部读取
NODE_ENV='dev'
VITE_APP_TITLE="开发环境"
VITE_APP_BASE_API="/dev-api"
VITE_SERVER_URL="http://localhost:3001"

最后在package.json文件中添加

  "scripts": {
    "dev": "vite --open",
    "build": "vue-tsc && vite build",
    "build:test": "vue-tec&&vite build --mode test",
    "build:pro": "vue-tsc&&vite build --mode production"
  },

通过import.meta.env获取环境变量

5、SVG图标配置

svg对应矢量图,比img图标小,几乎不怎么占用资源,安装依赖插件

npm i vite-plugin-svg-icons -D

配置文件修改vite.config.ts

src/assets/icons

在main.ts文件添加配置

//svg插件需要配置代码
import 'virtual:svg-icons-register';

还需要在文件中创建src/assets/icons,icons文件夹,需要创建的图标都可以写在里面,比如:phone.svg,把图标代码复制上去iconfont-阿里巴巴矢量图标库

在项目中引用:

    <!-- svg图标外层容器,内部需要use标签结合使用 -->
    <svg style="width: 30px;height: 30px;">
      <!-- 执行用哪一个图标,属性值必须是:#icon-图标名字 -->
      <use xlink:href="#icon-phone" fill="red"></use>
    </svg>

6、自定义插件,将全局组件打包注册

在components文件夹下,新建index.ts

//引入项目中全部的组件
import SvgIcon from './SvgIcon/index.vue'
import Pagination from './Pagination/index.vue'

//全局对象
const allGloablComponents = { SvgIcon, Pagination };

//对外暴露插件对象
export default{
    //务必要做install方法
    install(app){
        Object.keys(allGloablComponents).forEach(key=>{
            app.component(key,allGloablComponents[key])
        })
    }
}

然后在到main.ts文件中注册

//引入自定义插件对象:注册整个项目全局组件
import registerGlobComp from '@/components';

createApp(App)
  .use(ElementPlus)
  .use(ElementPlus, {
    locale: zhCn,
  })
  .use(registerGlobComp)
  .mount('#app');

6、安装全局style样式

在src/style/index.sass ,新建文件index.sass,

npm官网下载:npm | Home

reset.scss 文件,进行复制

在vite.config.ts文件中添加该配置,并在对应的文件下创建variables.scss,务必是这个文件,对应的全局变量

css: {
    preprocessorOptions: {
      scss:{
        javascriptEnabled: true,
        additionalData: `@import "@/styles/variables.scss";`
      }
      }
    }