Vue2项目搭建:Vue2.7+Vite4+Pinia+TailwindCSS+Prettier+ESLint

news/2024/9/17 7:15:51/ 标签: vue.js, 前端, 前端工程化

目前 create-vue 和 Vite 都不提供 Vue2 项目的搭建,不想用 Vue CLI 和 webpack,于是就打算从 0 搭建一个工程化项目,支持组合式 API (Composition API) 写法,没有使用 TypeScript,有朋友需要的话我可以再完善一下。

  • Node.js 16.x
  • pnpm 8.x

初始化

mkdir vue2-vite
cd vue2-vite
pnpm init

安装依赖:

pnpm install vue@^2 vue-router@^3 pinia
pnpm install vite@^4 @vitejs/plugin-vue2 tailwindcss postcss autoprefixer prettier prettier-plugin-tailwindcss eslint@^8 eslint-config-prettier eslint-plugin-prettier eslint-plugin-vue -D

package.json:

{"name": "vue2-vite","version": "1.0.0","scripts": {"dev": "vite","build": "vite build","preview": "vite preview","lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore","format": "prettier --write \"src/**/*.{vue,js,css,scss}\""},"keywords": [],"author": "","license": "ISC","devDependencies": {"@vitejs/plugin-vue2": "^2.3.1","autoprefixer": "^10.4.20","eslint": "^8.57.0","eslint-config-prettier": "^9.1.0","eslint-plugin-prettier": "^5.2.1","eslint-plugin-vue": "^9.27.0","postcss": "^8.4.41","prettier": "^3.3.3","prettier-plugin-tailwindcss": "^0.6.6","tailwindcss": "^3.4.10","vite": "^4.5.3"},"dependencies": {"pinia": "^2.2.2","vue": "^2.7.16","vue-router": "^3.6.5"}
}

Vite

新建 vite.config.js 文件:

import vue from '@vitejs/plugin-vue2'
import { fileURLToPath, URL } from 'node:url'export default {plugins: [vue()],resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url)),},},
}

Tailwind CSS

pnpm tailwindcss init -p

修改 tailwindcss.config.js 文件:

/** @type {import('tailwindcss').Config} */
export default {content: ["./index.html","./src/**/*.{js,ts,jsx,tsx,vue}",],theme: {extend: {},},plugins: [],
}

新建 src/assets/styles/index.css 文件:

@tailwind base;  
@tailwind components;  
@tailwind utilities;

Prettier

新建 prettier.config.mjs 文件:

/*** @see https://prettier.io/docs/en/configuration.html* @type {import("prettier").Config}*/
export default {semi: false,singleQuote: true,htmlWhitespaceSensitivity: 'ignore',plugins: ['prettier-plugin-tailwindcss'],
}

ESLint

新建 .eslintrc.cjs 文件:

/* eslint-env node */  
module.exports = {  root: true,  extends: ['plugin:vue/recommended', 'eslint:recommended', 'prettier'],  plugins: ['prettier'],  rules: {  'vue/multi-word-component-names': 'off',  },  
}

Vue

新建 index.html文件:

<!doctype html>
<html lang="zh"><head><meta charset="UTF-8" /><link rel="icon" href="/favicon.ico"><metaname="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/><meta http-equiv="X-UA-Compatible" content="ie=edge" /><title>vue2-vite</title></head><body><div id="app"></div><script type="module" src="/src/main.js"></script></body>
</html>

新建入口文件 src/main.js

import Vue from 'vue'
import { createPinia, PiniaVuePlugin } from 'pinia'import App from '@/App.vue'
import router from '@/router'
import '@/assets/styles/index.css'const pinia = createPinia()Vue.use(PiniaVuePlugin)new Vue({render: (h) => h(App),router,pinia,
}).$mount('#app')

新建 src/App.vue 文件:

<script setup></script><template><div><router-view /></div>
</template>

tips:如果是 WebStorm 编辑器,并且是通过 pnpm 安装的依赖,可能会遇到 router-view、router-link 标签无法识别的问题,可以展开 node_modules 文件夹,找到 vue-router,右键,将目标标记为 -> 不排除,就可以了。类似问题:https://youtrack.jetbrains.com/issue/WEB-56972/Vue-library-components-not-resolved-when-installed-with-pnpm

Vue Router

新建 src/router/index.js 文件:

import Vue from 'vue'
import Router from 'vue-router'Vue.use(Router)const routes = [{path: '/',name: 'home',component: () => import('@/views/Home.vue'),},
]const router = new Router({mode: 'history',routes,
})export default router

新建 src/views/Home.vue 文件:

<script setup></script><template><div>Home</div>
</template>

pinia

新建 src/store/counter.js

import { computed, ref } from 'vue'  
import { defineStore } from 'pinia'  export const useCounterStore = defineStore('counter', () => {  const count = ref(0)  const doubleCount = computed(() => count.value * 2)  function increment() {  count.value++  }  return { count, doubleCount, increment }  
})

在 Vue 中使用:

<script setup>
import { useCounterStore } from '@/store/counter'const counterStore = useCounterStore()
</script><template><div><div>{{ counterStore.count }}</div><div>{{ counterStore.doubleCount }}</div><button @click="counterStore.increment">increment</button></div>
</template>

http://www.ppmy.cn/news/1522611.html

相关文章

结构体小知识

目录 前言1.结构体数组1.1结构体数组理解1.2结构体数组知识运用1.3 -> 操作符 2. 知识拓展 前言 本期blog是对上一期指针知识的知识补充&#xff0c;如果各位大佬感兴趣的话&#xff0c;可以结合起来一起看&#xff01; 1.结构体数组 1.1结构体数组理解 结构体数组在本…

pytorch torch.nn.functional.one_hot函数介绍

torch.nn.functional.one_hot 是 PyTorch 中用于生成独热编码&#xff08;one-hot encoding&#xff09;张量的函数。独热编码是一种常用的编码方式&#xff0c;特别适用于分类任务或对离散的类别标签进行处理。该函数将整数张量的每个元素转换为一个独热向量。 函数签名 tor…

notepad++软件介绍(含安装包)

Notepad 是一款开源的文本编辑器&#xff0c;主要用于编程和代码编辑。它是一个功能强大的替代品&#xff0c;常常被用来替代 Windows 系统自带的记事本。 Notepad win系统免费下载地址 以下是 Notepad 的一些主要特点和功能&#xff1a; 多语言支持&#xff1a;Notepad 支持多…

Kafka【八】如何保证消息发送的可靠性、重复性、有序性

【1】消息发送的可靠性保证 对于生产者发送的数据&#xff0c;我们有的时候是不关心数据是否已经发送成功的&#xff0c;我们只要发送就可以了。在这种场景中&#xff0c;消息可能会因为某些故障或问题导致丢失&#xff0c;我们将这种情况称之为消息不可靠。虽然消息数据可能会…

proxy代理解决vue中跨域问题

vue.config.js module.exports {...// webpack-dev-server 相关配置devServer: {host: 0.0.0.0,port: port,open: true,proxy: {/api: {target: https://vfadmin.insistence.tech/prod-api,changeOrigin: true,pathRewrite: {//[^ process.env.VUE_APP_BASE_API]: ^/api: / …

【 html+css 绚丽Loading 】000044 两仪穿行轮

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…

【sql】评估数据迁移复杂度调查汇报240904

难度判断标准&#xff1a; - 高难度&#xff1a;使用多个表&#xff08;TBL&#xff09;或有多个join操作的工具 - 低难度&#xff1a;表数量少且没有join操作的简单工具 - 中等难度&#xff1a;介于高低之间&#xff0c;有少量join操作的工具 5. 最后说明不需要仔细…

25届计算机毕业设计:3步打造北部湾助农平台,Java SpringBoot实践

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

AF透明模式/虚拟网线模式组网部署

透明模式组网 实验拓扑 防火墙基本配置 接口配置 eth1 eth3 放通策略 1. 内网用户上班时间&#xff08;9:00-17:00&#xff09;不允许看视频、玩游戏及网上购物&#xff0c;其余时 间访问互联网不受限制&#xff1b;&#xff08;20 分&#xff09; 应用控制策略 2. 互联…

[论文笔记]RAFT: Adapting Language Model to Domain Specific RAG

引言 今天带来一篇结合RAG和微调的论文&#xff1a;RAFT: Adapting Language Model to Domain Specific RAG。 为了简单&#xff0c;下文中以翻译的口吻记录&#xff0c;比如替换"作者"为"我们"。 本文介绍了检索增强微调(Retrieval Augmented Fine Tunin…

【Impala SQL 造数(一)】

前言 SQL 造数即生成测试数据&#xff0c;一般是编码完成之后的测试阶段所需&#xff0c;测试数据可以用于多种目的&#xff0c;包括测试应用程序的功能、业务场景测试、性能测试、数据恢复测试等。在测试阶段特别是数据类需求&#xff0c;需要很多造数场景&#xff0c;像 Hiv…

尚品汇-支付宝支付同步异步回调实现(四十七)

目录&#xff1a; &#xff08;1&#xff09;订单支付码有效时间 &#xff08;2&#xff09;支付后回调—同步回调 &#xff08;3&#xff09;支付宝回调—异步回调 &#xff08;1&#xff09;订单支付码有效时间 &#xff08;2&#xff09;支付后回调—同步回调 static修饰…

【Jupyter Notebook】安装与使用

打开Anaconda Navigator点击"Install"(Launch安装前是Install)点击"Launch"点击"File"-"New"-"Notebook"​ 5.点击"Select"选择Python版本 6.输入测试代码并按"Enter+Shift"运行代码: 代码如下: …

考研系列-408真题数据结构篇(18-23)

写在前面 此文章是本人在备考过程中408真题数据结构部分(2018年-2023年)的易错题及相应的知识点整理,后期复习也尝尝用到,对于知识提炼归纳理解起到了很大的作用,分享出来希望帮助到大家~ # 2018年 1.堆的建立(从后往前进行调整) 2.算法(正整数和数组之间关系的建立)

k8s API资源对象ingress

有了Service之后&#xff0c;我们可以访问这个Service的IP&#xff08;clusterIP&#xff09;来请求对应的Pod&#xff0c;但是这只能是在集群内部访问。 要想让外部用户访问此资源&#xff0c;可以使用NodePort&#xff0c;即在node节点上暴漏一个端口出来&#xff0c;但是这…

pytorch+深度学习实现图像的神经风格迁移

本文的完整代码和部署教程已上传至本人的GitHub仓库&#xff0c;欢迎各位朋友批评指正&#xff01; 1.各代码文件详解 1.1 train.py train.py 文件负责训练神经风格迁移模型。 加载内容和风格图片&#xff1a;使用 utils.load_image 函数加载并预处理内容和风格图片。初始化…

Banana Pi BPI-SM9 AI 计算模组采用算能科技BM1688芯片方案设计

产品概述 香蕉派 Banana Pi BPI-SM9 16-ENC-A3 深度学习计算模组搭载算能科技高集成度处理器 BM1688&#xff0c;功耗低、算力强、接口丰富、兼容性好。支持INT4/INT8/FP16/BF16/FP32混合精度计算&#xff0c;可支持 16 路高清视频实时分析&#xff0c;灵活应对图像、语音、自…

Java中等题-摆动序列(力扣)

如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为 摆动序列 。第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 例如&#xff0c; [1, 7, 4, 9, 2, 5] 是一个 摆动序列 &…

数据库锁之行级锁、记录锁、间隙锁和临键锁

1. 行级锁 InnoDB 引擎支持行级锁&#xff0c;而MyISAM 引擎不支持行级锁&#xff0c;只支持表级锁。行级锁是基于索引实现的。 对于普通的select语句&#xff0c;是不会加记录锁的&#xff0c;因为它属于快照读&#xff0c;通过在MVCC中的undo log版本链实现。如果要在查询时对…

Python 安装selenium的办法

之前一直安装python以为要进入python的菜单进行输入 如下 老是提示错误,原来是我搞错了,安装这个直接进入cmd即可 如下 pip install selenium 再用pip list查看一下是否安装成功