1.vue3-vant-h5-template移动端模板

1.创建项目

创建项目之前首先确保你安装了最新版本的 Node.js

image.png

创建项目,在命令行中运行以下命令

npm init vue@latest
image.png

执行如下命令进入项目更目录并按照依赖

cd vue3-vant-h5-template
npm install
image.png

执行下面命令运行项目

npm run dev
image.png

2.安装vant

vant官网:https://vant-contrib.gitee.io/vant/#/zh-CN

image.png

2.1在现有项目中使用 Vant 时,可以通过 npm 进行安装:

# Vue 3 项目,安装最新版 Vant
npm i vant --save

2.2按需引入组件

在基于 vite 的项目中使用 Vant 时,可以使用 unplugin-vue-components 插件,它可以自动引入组件,并按需引入组件的样式。

安装插件

# 通过 npm 安装
npm i unplugin-vue-components -D

配置插件

如果是基于 vite 的项目,在 vite.config.js 文件中配置插件:

import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import Components from 'unplugin-vue-components/vite'
import { VantResolver } from 'unplugin-vue-components/resolvers'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    Components({
      resolvers:[VantResolver()]
    })
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  }
})

使用组件

完成以上两步,就可以直接在模板中使用 Vant 组件了,unplugin-vue-components 会解析模板并自动注册对应的组件。

<template>
  <van-button type="primary" />
</template>

引入函数组件的样式

Vant 中有个别组件是以函数的形式提供的,包括 Toast,Dialog,Notify 和 ImagePreview 组件。在使用函数组件时,unplugin-vue-components 无法自动引入对应的样式,因此需要手动引入样式。

// main.ts
import { createApp } from "vue";
import App from "./App.vue";

import "./assets/main.css";

//引入vant中函数式组件的样式
// Toast
import "vant/es/toast/style";
// Dialog
import "vant/es/dialog/style";
// Notify
import "vant/es/notify/style";
// ImagePreview
import "vant/es/image-preview/style";


createApp(App).mount("#app");

你可以在项目的入口文件或公共模块中引入以上组件的样式,这样在业务代码中使用组件时,便不再需要重复引入样式了。

// ./src/components/HelloWorld.vue
<script setup lang="ts">
import { showToast, showDialog, showNotify, showImagePreview } from "vant";

defineProps<{
  msg: string;
}>();

const testShowToast = () => {
  showToast("测试showToast");
};
const testShowDialog = () => {
  showDialog({ message: "测试showDialog" });
};
const testShowNotify = () => {
  showNotify({ message: "测试showNotify" });
};
const testShowImagePreview = () => {
  showImagePreview(['https://fastly.jsdelivr.net/npm/@vant/assets/apple-1.jpeg']);
};
</script>

<template>
  <div>
    <van-button type="primary" @click="testShowToast">showToast</van-button>
    <van-button type="success" @click="testShowDialog">showDialog</van-button>
    <van-button type="default" @click="testShowNotify">showNotify</van-button>
    <van-button type="warning" @click="testShowImagePreview">showImagePreview</van-button>
  </div>
</template>

<style scoped>
</style>

3.浏览器适配

Viewport 布局

Vant 默认使用 px 作为样式单位,如果需要使用 viewport 单位 (vw, vh, vmin, vmax),推荐使用 postcss-px-to-viewport 进行转换。

postcss-px-to-viewport 是一款 PostCSS 插件,用于将 px 单位转化为 vw/vh 单位。

3.1安装

npm install postcss-px-to-viewport -D

3.2在项目根目录下添加postcss.config.js文件

// postcss.config.js
module.exports = {
  plugins: {
    'postcss-px-to-viewport': {
      viewportWidth: 375,
    },
  },
};

Tips: 在配置 postcss-loader 时,应避免 ignore node_modules 目录,否则将导致 Vant 样式无法被编译。

别急,你以为就这样完事了吗,并没有。上面只是对设计稿尺寸为 375 的进行转换( vant 设计稿尺寸是 375 🤦♂️),但是我们大部分设计稿尺寸都是 750 ,所以需要额外对 750 尺寸的进行处理。
由于 postcss-px-to-viewport 没有提供类似 postcss-pxtorem 中 rootValue({ file }) {} 的方法,即便使用 module.exports = (param) => {} 这种方式导出postcss配置,也拿不到当前转换文件的信息(备注:以前我记得是可以拿到的,现在拿不到了),所以无法根据文件路径动态设置 viewportWidth,
有一种hack方式:通过多次 pxToViewport() 处理不同文件来设置viewportWidth😎

// postcss.config.js
const path = require('path');
const pxToViewport = require('postcss-px-to-viewport');
module.exports = {
  plugins: [
    pxToViewport({ // vant
      viewportWidth: 375,
      propList: ["*"], // 指定转换的css属性的单位,*代表全部css属性的单位都进行转换
      selectorBlackList: ['aaaa'],// 指定不转换为视窗单位的类名,
      exclude: [/^(?!.*node_modules\/vant)/],// 设置忽略文件,用正则做目录名匹配
      //include: [/node_modules\/vant/],
    }),
    pxToViewport({ // 非vant
      viewportWidth: 750,
      exclude: [/node_modules\/vant/],
    })
  ]
}

第一个处理 vant 的 pxToviewport 为什么不用include选项呢?

因为 postcss-px-to-viewport v1.1.1 不支持 include 配置项,v1.2.0 开始加入include,但是并没有发布到npm仓库🤦♂️,
然后运行项目,你会发现报如下警告:


bb5224bc4782023d86e9681d7ddaec5.png

原因是 postcss-px-to-viewport 不支持 postcss 8.x ,而vite内置postcss 8.x,所以使用postcss-px-to-viewport会抛出警告🤦♂️

要改用 postcss-px-to-viewport-8-plugin(https://github.com/lkxian888/postcss-px-to-viewport-8-plugin) 替代,既支持 include 配置项,也支持postcss 8.x

image.png
image.png

安装:

npm install postcss-px-to-viewport-8-plugin -D

最终完整的postcss.config.js代码为:

// postcss.config.js
const path = require('path');
const pxToViewport = require('postcss-px-to-viewport-8-plugin');
module.exports = {
  plugins: [
    pxToViewport({ // vant
      viewportWidth: 375,
      propList: ["*"], // 指定转换的css属性的单位,*代表全部css属性的单位都进行转换
      selectorBlackList: ['aaaa'],// 指定不转换为视窗单位的类名,
      exclude: [/^(?!.*node_modules\/vant)/],// 设置忽略文件,用正则做目录名匹配
    }),
    pxToViewport({ // 非vant
      viewportWidth: 750,
      exclude: [/node_modules\/vant/],
    })
  ]
}

4.自动添加前缀

autoprefixer是一款自动管理浏览器前缀的插件,它可以解析CSS文件并且添加浏览器前缀到CSS内容里,使用Can I Use(caniuse网站)的数据来决定哪些前缀是需要的

安装

npm i autoprefixer -D

在postcss.config.js中配置

// postcss.config.js
const autoprefixer = require('autoprefixer');
const pxToViewport = require('postcss-px-to-viewport-8-plugin');
module.exports = {
  plugins: [
    autoprefixer({
      overrideBrowserslist: ['Android 4.1', 'iOS 7.1', 'Chrome > 35', 'ff > 31', 'ie >= 8']
    }), // 自动为css添加浏览器前缀
    pxToViewport({ // vant
      viewportWidth: 375,
      propList: ["*"], // 指定转换的css属性的单位,*代表全部css属性的单位都进行转换
      selectorBlackList: ['aaaa'],// 指定不转换为视窗单位的类名,
      exclude: [/^(?!.*node_modules\/vant)/],// 设置忽略文件,用正则做目录名匹配
    }),
    pxToViewport({ // 非vant
      viewportWidth: 750,
      exclude: [/node_modules\/vant/],
    })
  ]
}

5.CSS 预处理器less

安装

npm install less -D

安装后直接使用就可以啦


image.png

6.项目规范

6.1集成editorconfig配置

EditorConfig 有助于为不同 IDE 编辑器上处理同一项目的多个开发人员维护一致的编码风格。

在项目根目录创建.editorconfig文件

# http://editorconfig.org

root = true

[*] # 表示所有文件适用
charset = utf-8 # 设置文件字符集为 utf-8
indent_style = space # 缩进风格(tab | space)
indent_size = 2 # 缩进大小
end_of_line = lf # 控制换行类型(lf | cr | crlf)
trim_trailing_whitespace = true # 去除行首的任意空白字符
insert_final_newline = true # 始终在文件末尾插入一个新行

[*.md] # 表示仅 md 文件适用以下规则
max_line_length = off
trim_trailing_whitespace = false

VSCode需要安装一个插件:EditorConfig for VS Code


image.png

6.2. 使用prettier工具(不需要做,创建项目时自动安装了prettier并生成了配置文件)

Prettier 是一款强大的代码格式化工具,支持 JavaScript、TypeScript、CSS、SCSS、Less、JSX、Angular、Vue、GraphQL、JSON、Markdown 等语言,基本上前端能用到的文件格式它都可以搞定,是当下最流行的代码格式化工具。

1.安装prettier

npm install prettier -D

2.在项目根目录创建.prettierrc文件并配置:

  • useTabs:使用tab缩进还是空格缩进,选择false;

  • tabWidth:tab是空格的情况下,是几个空格,选择2个;

  • printWidth:当行字符的长度,推荐80,也有人喜欢100或者120;

  • singleQuote:使用单引号还是双引号,选择true,使用单引号;

  • trailingComma:在多行输入的尾逗号是否添加,设置为 none

  • semi:语句末尾是否要加分号,默认值true,选择false表示不加;

{
  "useTabs": false,
  "tabWidth": 2,
  "printWidth": 80,
  "singleQuote": true,
  "trailingComma": "none",
  "semi": false
}

3.创建.prettierignore忽略文件

/dist/*
.local
.output.js
/node_modules/**

**/*.svg
**/*.sh

/public/*

4.VSCode需要安装prettier的插件

image.png

5.测试prettier是否生效

  • 测试一:在代码中保存代码;

  • 测试二:配置一次性修改的命令;

在package.json中配置一个scripts:

    "prettier": "prettier --write ."

一次性格式化所有编写的js代码,执行npm run prettier

而我们按照之前命令创建项目时其实已经安装了prettier,并且在package.json中自动添加了用来格式化代码的脚本,也自动创建了.prettierrc.json文件


image.png

image.png

6.3. 使用ESLint检测

1.在前面创建项目的时候,我们就选择了ESLint,所以Vue会默认帮助我们配置需要的ESLint环境。

2.VSCode需要安装ESLint插件:

image.png

————————————————
版权声明:本文参考CSDN博主「小满只想睡觉」的原创文章,链接:https://blog.csdn.net/xxxzzzqqq_/article/details/129554703

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

推荐阅读更多精彩内容