vue3项目的搭建

vs插件准备
如果要使用vue3, 那么要把vue2使用的vetur插件禁用, 把vue使用的vue language features 插件启用,

如果使用ts语言, 就需要把typeScript vue plugin 插件启用, 如果用js语言就把typeScript vue plugin 插件禁用

创建项目

创建指令, 这一指令将会安装并执行 create-vue

npm init vue@latest
✔ Project name: … vue3TSDemo
✔ Package name: … vue3tsdemo
✔ Add TypeScript? … No / Yes
✔ Add JSX Support? … No / Yes
✔ Add Vue Router for Single Page Application development? … No / Yes
✔ Add Pinia for state management? … No / Yes
✔ Add Vitest for Unit Testing? … No / Yes
✔ Add an End-to-End Testing Solution? › No
✔ Add ESLint for code quality? … No / Yes
✔ Add Prettier for code formatting? … No / Yes

如果不确定是否要开启某个功能,你可以直接按下回车键选择 No。在项目被创建后,通过以下步骤安装依赖并启动开发服务器:

cd vue3TSDemo
npm install
npm run dev

当你准备将应用发布到生产环境时,请运行:

npm run build

安装需要的工具(按需引入)

一, 安装网络请求axios

安装
npm install axios --save
使用
  1. 创建request.ts文件进行封装成工具
// 引入axios
import axios from "axios";
// 引入axios的配置类型
import type { InternalAxiosRequestConfig } from "axios";
// 引入toast提示, 用于提示错误信息
import { ElMessage } from "element-plus";

// 获取服务器地址
const baseUrl = "http://192.168.10.215:7777"

// 创建请求
const service = axios.create({
  // url = base url + request url
  baseURL: baseUrl,
  // request timeout
  timeout: 1000 * 30,
  // send cookies when cross-domain requests
  withCredentials: true
});

// request拦截器
service.interceptors.request.use(
  (config: InternalAxiosRequestConfig) => {
    // 设置header
    config.headers["appname"] = "mixi"

    return config;
  },
  error => {
    console.log(error);
    return Promise.reject(error)
  }
)

// response拦截器
service.interceptors.response.use(
  // @ts-ignore
  response => {
    // 清除所有提示
    ElMessage.closeAll();
    const res = response.data;
    if (res.code == 0) {
      return Promise.resolve(res);
    } else if (res.code == 1) {
      ElMessage.error(res.errorMsg);
      return Promise.reject(res);
    }
  },
  error => {
    ElMessage.closeAll();
    console.log(error);
    ElMessage.error('网络错误');
    return Promise.reject(error);
  }
)

export default service;
  1. 创建api.ts文件
// 引入请求工具
import request from "@/utils/request"
// 登录接口
export function login( params:Object ) {
  return request({
    url: "/login/",
    method: "get",
    data: params
  })
}
// 获取验证码
export function loginMessage(params: Object) {
  return request({
    url: "/login/message/",
    method: "get",
    data: params
  })
}
  1. 在vue文件中进行网络请求
import { login } from "@/api/api"
onMounted(() => {
  login({ user: "张三", pwd: "" }).then(res => {
    console.log(res);
  }).catch(error => {
    console.log(error);
  });
});

二, 安装css嵌套工具sass

安装

以前用vue-cli的时候,还要安装sass-loader、node-sass什么的,安装的时候还会遇到各种问题,但是vite其实安装sass就可以了,很简单

npm install sass -D
使用

按需引入并使用

<style scoped lang="scss">
.list{
  .list-item{
    .title{
    }
    .content{
    }
  }
}
</style>

三, 安装日期处理类库moment

安装
npm install moment --save
使用

要使用的vue文件中按需引入,

import Moment from "moment";

也可以挂载全局变量

Vue.prototype.$moment = moment;

使用方式

let date = Moment("2020-06-03", "YYYY-MM-DD").fromNow();

一般创建一个自定义工具类dateUtil.ts进行封装

import Moment from "moment";


// 按指定时间获取时间戳  默认获取当前时间时间戳
// dateStr 需要转化为时间戳的时间, 格式为 "YYYY-MM-DD", ? 代表可传, 可不传
export function dateTimestamp(dateStr?:any) {
  let stamp = new Date().getTime();
  if (dateStr) {
    stamp = new Date(dateStr).getTime();
  }
  return stamp;
}

// 时间戳转化为指定日期格式 默认转化为格式为 'YYYY-MM-DD hh:mm'
// timestamp: 需要格式化的时间戳, 
// formatter: 需要转化成的格式, ? 代表可传, 可不传
export function dateFormatterTimestamp(timestamp: any, formatter?: any) {
  let format = 'YYYY-MM-DD hh:mm:ss';
  if (formatter) {
    format = formatter;
  }
  const stamp = new Date(timestamp);
  const date = Moment(stamp).format(format);
  return date;
}

// 将时间秒数, 转化为几小时几分几秒
export function dateSecondsChangeToHours(seconds: any) {
  // 需要转换的时间秒数量, 将字符串转换为数字
  const secondsValue = parseInt(seconds); 
  // 天个数
  let day = 0; // 分
  // 小时个数
  let hour = 0; // 分
  // 分钟数
  let minute = 0; // 小时
  // 秒个数
  let second = 0; // 天
  // 秒数转化为分钟数
  if (secondsValue > 60) {
    // 如果秒数大于60秒, 计算有多少分钟
    minute = secondsValue / 60;
    // 计算剩余的秒数
    second = secondsValue % 60;
    // 继续将分转化为小时
    if (minute > 60) {
      // 如果分钟数大于60秒, 计算有多少小时
      hour = minute / 60;
      // 计算剩余的分钟数
      minute = minute % 60;
      // 继续将小时转化为天
      if (hour > 24) {
        // 大于24小时
        day = hour / 24;
        hour = hour % 24;
      }
    }
  } else {
    second = secondsValue;
  }
  let result = "";
  // // 秒加0格式问题
  // if (second < 9) {
  //   second = "0" + second;
  // }
  // // 分加0格式问题
  // if (minute < 9) {
  //   minute = "0" + second;
  // }
  // // 小时加0格式问题
  // if (hour < 9) {
  //   hour = "0" + second;
  // }
  // // 天加0格式问题
  // if (day < 9) {
  //   day = "0" + second;
  // }
  result = day + "天" + hour + "小时" + minute + "分钟" + second + '秒';
  return result;
}

// 根据出生日期(生日)计算年龄, 出生日期格式为 1970-01-01
export function getAgeFromBirthday(birthday:string) {
  let age = 0
  if (birthday) {
    // 格式化时间格式
    if (birthday.search('.') != -1) {
      birthday = birthday.replace(/\./g, "-")
      console.log(birthday)
    }
    const birthdayArray = birthday.split('-');
    const nowDate = new Date();
    const today = [nowDate.getFullYear(), nowDate.getMonth() + 1, nowDate.getDate()];
    const ageArray = today.map((val, index) => {
      return val - Number(birthdayArray[index]);
    })
    if (ageArray[2] < 0) {
      const lastMonth = new Date(today[0], today[1], 0);
      ageArray[1]--;
      ageArray[2] += Number(lastMonth.getDate);
    }
    if (ageArray[1] < 0) {
      ageArray[0]--;
      ageArray[1] += 12;
    }
    age = ageArray[0] + 1;
  }
  return age;
}

四, 安装cookie管理工具js-cookie

npm install js-cookie --save

使用, 在需要使用的地方引入

import Cookies from "js-cookie";
// 组件中使用
// 写入cookie
Cookies.set('name', 'value')
// 读取
Cookies.get('name') // => 'value'
Cookies.get('nothing') // => undefined
// 读取所有可见的cookie
Cookies.get()
// 删除某项cookie值
Cookies.remove('name')

五, 安装手机组件UI库vant

npm install vant --save

使用
在main.ts中引入并挂载

import vant from 'vant';
import 'vant/lib/index.css';
app.use(vant)

六, 安装实现移动端适配方案工具amfe-flexible

安装

npm install amfe-flexible --save
npm install postcss-px2rem --save-dev

使用
在项目根目录中, 新建 postcss.config.js, 并写入:

module.exports = {
  plugins: {
    'postcss-px2rem': {
      // viewportWidth: 375,  // 视窗的宽度,对应的是我们设计稿的宽度.
      // viewportHeight: 667, // 视窗的高度,对应的是我们设计稿的高度.(也可以不配置)
      // unitPrecision: 5, // 保留几位小数,指定`px`转换为视窗单位值的小数位数(很多时候无法整除)
      remUnit: 37.5,
      // selectorBlackList: ['tab-bar', 'tab-bar-item','shopping-cart-bottom-bar'], // 指定不需要转换的类
      // minPixelValue: 1, // 小于或等于`1px`不转换为视窗单位.
      // mediaQuery: false // 允许在媒体查询中转换`px`
    }
  }
}

在 main.js 中引入 amfe-flexible 插件

import 'amfe-flexible'

七, 安装网页(饿了么)组件UI库element-plus

安装

npm install element-plus --save

使用
在main.ts中引入并挂载

import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
app.use(ElementPlus)

八, 安装加载进度条nprogress

安装

npm install nprogress --save

九, 安装pinia需要使用的pinia-plugin-persistedstate插件来进行数据的存储

安装

npm install pinia-plugin-persistedstate --save

十, 安装可视化大屏自适应工具:autofit.js

安装

npm install autofit --save

十一, 安装图形或者边框生成组件

安装

npm install @kjgl77/datav-vue3 --save
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容