前端项目构建 vite2 vue3 ts Vuex4 VueRouter4 Element-plus axios

项目构建

vite2 vue3 ts Vuex VueRouter Element-plus axios

vscode

#初始化项目
npm init vite@latest

#or

yarn create vite
#Need to install the following packages:
#  create-vite@latest
#Ok to proceed? (y) y
#√ Project name: ... shop-admin
#√ Select a framework: » vue
#√ Select a variant: » vue-ts
#Scaffolding project in E:\vue_project\shop-admin...
#Done. Now run:

#进入项目文件夹
cd shop-admin
#使用vscode打开项目
code .
#打开终端  安装依赖包
  npm install
  npm run dev
	
#or
 
  yarn
  yarn dev
	
-----------------------------------------------
1.安装eslint代码检测插件
npm install eslint --save-dev

# or

yarn add eslint --dev
2.初始化ESlint配置
npm init @eslint/config

# or

yarn create @eslint/config


-----------------------------------------------
? How would you like to use ESLint? ...
  To check syntax only
  To check syntax and find problems
> To check syntax, find problems, and enforce code style
-----------------------------------------------
? What type of modules does your project use? ...
> JavaScript modules (import/export)
  CommonJS (require/exports)
  None of these
-----------------------------------------------
? Which framework does your project use? ...
  React
> Vue.js
  None of these
-----------------------------------------------
? Does your project use TypeScript? » No / Yes Yes
-----------------------------------------------
? Where does your code run? ...  (Press <space> to select, <a> to toggle all, <i> to invert selection)
√ Browser
  Node
-----------------------------------------------
? How would you like to define a style for your project? ...
> Use a popular style guide
  Answer questions about your style
-----------------------------------------------
? Which style guide do you want to follow? ...
  Airbnb: https://github.com/airbnb/javascript
> Standard: https://github.com/standard/standard
  Google: https://github.com/google/eslint-config-google
  XO: https://github.com/xojs/eslint-config-xo
-----------------------------------------------
? What format do you want your config file to be in? ...
> JavaScript
  YAML
  JSON
-----------------------------------------------
? The style guide "standard" requires eslint@^7.12.1. You are currently using eslint@8.13.0.
  Do you want to downgrade? » No / Yes  Yes
-----------------------------------------------
eslint-plugin-vue@latest @typescript-eslint/eslint-plugin@latest eslint-config-standard@latest eslint@^7.12.1 eslint-plugin-import@^2.22.1 eslint-plugin-node@^11.1.0 eslint-plugin-promise@^4.2.1 || ^5.0.0 @typescript-eslint/parser@latest
? Would you like to install them now with npm? » No / Yes  Yes
4.npm script 中添加验证脚本package.json
 "scripts": {
 	...
    "lint": "eslint ./src/**/*.{js,jsx,vue,ts,tsx} --fix"
  },
}
5. .eslintrc.js eslint验证规则修改为vue3
  • node_modules\eslint-plugin-vue\lib\configs\vue3-strongly-recommended.js
  • 参考官网

extends: [
    'plugin:vue/essential', 
    ]
    
# 修改为    

extends: [
	'plugin:vue/vue3-strongly-recommended',
	]

eslint 配置 git commit hook

#git初始化
git init

#安装插件
npx mrm@2 lint-staged
  • package.json 修改lint-staged
"lint-staged": {
    "*.{js,jsx,vue,ts,tsx}": "npm run lint"  
  }
 #or
 "lint-staged": {
    "*.{js,jsx,vue,ts,tsx}": "yarn lint"  
  }
#删除项目文件夹中的 6
在开发和构建中进行代码规范校验
	#install
	npm install vite-plugin-eslint --save-dev
	# or
	yarn add vite-plugin-eslint --dev
  • 修改vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import eslintPlugin from 'vite-plugin-eslint'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue(),
    eslintPlugin({
      // 配置选项
      cache: false // 禁用eslint缓存
    })]
})

git commit规范
# For Windows:
npm install --save-dev @commitlint/config-conventional @commitlint/cli

# Configure commitlint to use conventional config
#创建commitlint.config.js
#文件内容(下面一行)
module.exports = {extends: ['@commitlint/config-conventional']}

  • husky配置
# 因为前面 lint-staged 使用的npx命令 并且已经安装了husky 所以这里也需要使用 npx
# Install Husky v6
npm install husky --save-dev

# Activate hooks
npx husky install

# Add hook
npx husky add .husky/commit-msg "npx --no -- commitlint --edit $1"
vue3中setup语法糖 eslint校验出现问题
module.exports = {
  env: {
    'vue/setup-compiler-macros': true
  }
}
配置转换JSX和TSX
 npm i -D @vitejs/plugin-vue-jsx
  • Provides Vue 3 JSX & TSX support with HMR.
  • vite.config.js中添加
// vite.config.ts
import vueJsx from '@vitejs/plugin-vue-jsx'

export default {
  plugins: [
    vueJsx({
      // options are passed on to @vue/babel-plugin-jsx
    })
  ]
}
初始化VueRouter
npm install vue-router@4

初始化 Vuex

npm install vuex@next --save
#or
yarn add vuex@next --save
//Vuex 没有为 this.$store 属性提供开箱即用的类型声明。如果你要使用 TypeScript,首先需要声明自定义的模块补充(module augmentation)。
//为此,需要在项目文件夹中添加一个声明文件来声明 Vue 的自定义类型 ComponentCustomProperties

// src/vuex.d.ts
import { ComponentCustomProperties } from 'vue'
import { Store } from 'vuex'

declare module '@vue/runtime-core' {
  // 声明自己的 store state
  interface State {
    count: number
  }

  // 为 `this.$store` 提供类型声明
  interface ComponentCustomProperties {
    $store: Store<State>
  }
}
//引入 InjectionKey 并将其传入 useStore 使用过的任何地方,很快就会成为一项重复性的工作。为了简化问题,可以定义自己的组合式函数来检索类型化的 store :
-----------------------------------------------
// store.ts (store/index.ts)
import { InjectionKey } from 'vue'
import { createStore, useStore as baseUseStore, Store } from 'vuex'

export interface State {
  count: number
}

export const key: InjectionKey<Store<State>> = Symbol()

export const store = createStore<State>({
  state: {
    count: 0
  }
})

// 定义自己的 `useStore` 组合式函数
export function useStore () {
  return baseUseStore(key)
}
-----------------------------------------------
//现在,通过引入自定义的组合式函数,不用提供 injection key 和类型声明就可以直接得到类型化的 store:
-----------------------------------------------
// vue 组件
import { useStore } from './store'

export default {
  setup () {
    const store = useStore()

    store.state.count // 类型为 number
  }
}
配置vite中模块别名
npm i -D @types/node
  • vite.config.ts中添加
import {join} from 'path'


export default defineConfig({
 resolve: {
    alias: {
      '@': join(__dirname, 'src')
    }
  }
  • tsconfig.json中加入paths
 "compilerOptions": {
 ...
    "paths": {
      "@/*":[
        "./src/*"
      ]
    }
  },
CSS样式管理
# .scss and .sass install
npm install -D sass
  • src下创建 style文件夹 创建

    文件名说明
    variables.scss全局Sass变量
    mixin.scss全局mixin
    common.scss全局公共样式
    transition.scss全局过度动画样式
    index.scss组织统一导出
    //variables.scss  全局Sass变量
    $color: red
    
    //index.scss 组织统一导出
    @import "./common.scss";
    @import "./mixin.scss";
    @import "./transition.scss";
    @import "./variables.scss";
    
    
    //	main.ts	中导入index.scss
    // 加载全局样式
    import '@/style/index.scss'
    
  • 指定传递给 CSS 预处理器的选项

// vite.config.ts 加入
  css: {
    preprocessorOptions: {
      scss: {
        additionalData: '@import "@/style/variables.scss";'
      }
    }
  }
})
基于axios封装请求模块
  • 安装axios:

    npm install axios
    
    #or
    
    yarn add axios
    
  • 禁用api目录下的eslint驼峰命名验证

     overrides: [
        {
          files: ['src/api/**/*.ts'],
          rules: {
            camelcase: 'off'
          }
        }
      ]
    }
    
  • 创建/src/utils/request.ts

    //src/utils/request.ts
    import axios, { AxiosRequestConfig } from 'axios'
    
    // request 不支持泛型
    // request.get 、post、 put支持响应数据泛型
    
    const request = axios.create({
      baseURL: 'https://www.fastmock.site/mock/5f5c83c74506389e42f1b7d88fad82f5/charles'
    })
    
    // 请求拦截器
    request.interceptors.request.use(function (config) {
      // 统一设置用户身份 token
      return config
    }, function (error) {
      // Do something with request error
      return Promise.reject(error)
    })
    
    // 响应拦截器
    request.interceptors.response.use(function (response) {
      // 统一处理接口响应错误 比如 toke过期无效 服务器端异常等
      return response
    }, function (error) {
      // Any status codes that falls outside the range of 2xx cause this function to trigger
      // Do something with response error
      return Promise.reject(error)
    })
    
    export default <T = any>(config: AxiosRequestConfig) => {
      return request(config).then(res => {
        return res.data.data as T
      })
    }
    
    
  • 创建接口类型模块/src/api/types/common.ts

    //src/api/types/common.ts
    export interface ILoginInfo {
     logo_square: string;
      logo_rectangle: string;
      login_log: string;
      slide: string[];
    }
    
  • 创建/src/api/common.ts

    //src/api/common.ts
    /***
     * 公共基础接口封装
     */
    
    //  {
    //     "data": {
    //       "slide": [
    //         "bb",
    //         "bb"
    //       ],
    //       "logo_square": "aa",
    //       "logo_rectangle": "bb",
    //       "login_log": "cc"
    //     },
    //     "msg": "ok",
    //     "status": 200
    //   }
    
    import request from '@/utils/request'
    import type { ILoginInfo } from './types/common'
    
    export const getLoginInfo = () => {
      return request<ILoginInfo>({
        method: 'GET',
        url: '/login/info'
      })
    }
    
    
环境变量和模式
  • vite-环境变量和模式

  • 项目根目录创建以下文件

    .env                # 所有情况下都会加载的环境变量
    .env.local          # 所有情况下都会加载的环境变量,但会被 git 忽略
    .env.development    # 开发模式下加载的环境变量
    .env.production     # 生产模式下加载的环境变量
    
  • .env.development 中创建一个环境变量

    # 开发模式下加载的环境变量
    VITE_API_BASEURL = https://www.fastmock.site/mock/5f5c83c74506389e42f1b7d88fad82f5/charles
    
  • src 目录下创建一个 env.d.ts 声明环境变量的类型

    // eslint-disable-next-line no-unused-vars
    interface ImportMetaEnv {
      readonly VITE_API_BASEURL: string
      // 更多环境变量...
    }
    
  • 修改/src/utils/request.ts 引用环境变量

    const request = axios.create({
      baseURL: import.meta.env.VITE_API_BASEURL
    })
    
跨域问题 CORS

解决方案:

开发环境生产环境
在服务端配置CORS在服务端配置CORS
配置开发服务器代理,比如 vite-server.proxy配置生产服务器代理,比如nginx
Element-plus
  • element-plus
    npm install element-plus --save
    
    # or
    
    yarn add element-plus
    
    • 创建/src/plugins/element-plus.ts
    // src/plugins/element-plus.ts
    import ElementPlus from 'element-plus'
    import 'element-plus/dist/index.css'
    import { App } from 'vue'
    
    export default {
      install (app: App) {
        app.use(ElementPlus, { size: 'small', zIndex: 2000 })
      }
    }
    
    
  • main.ts中引入
    import elementPlus from './plugins/element-plus'
    
    createApp(App)
      .use(router)
      .use(store, key)
      .use(elementPlus)
      .mount('#app')
    
    
  • 国际化-全局配置
  • 修改App.vue
    <template>
      <el-config-provider :locale="locale">
        <router-view />
      </el-config-provider>
    </template>
    
    <script setup lang="ts">
    import locale from 'element-plus/lib/locale/lang/zh-cn'
    </script>
    
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值