搭建vue3.2+vite+ts+pinia项目

news2024/11/14 6:36:04

用到的技术

vue3.2+vite+ts+pinia

搭建项目

前言

vue3+vite 会比vue2+webpack的速度快很多;Vite 是一个轻量级的、速度极快的构建工具;
vite官网

创建项目

npm create vite@latest

报错了:
初始化失败 npm ERR! Could not install from “Files\nodejs\node_cache_npx\13480“ as it does
出现问题的原因是node_cache的路径中存在空格

解决方案:
npm config set prefix D:\Program Files\nodejs\node_global
npm config set cache D:\Program Files\nodejs\node_cache

成功之后 再次执行上面的命令
需要我们输入项目名、选择的技术vue、选择的语言ts
输入之后,就成功创建了一个项目了;

按照提示 执行

npm i

运行

npm run dev

安装pinia

前言

Pinia :是新版的vuex,简化了vuex,效率更快,上手更快,推荐在vue3使用
pinia官网

安装

npm install pinia

在src下新建store文件夹,在此文件夹下新建文件即可;

在main.ts中引入

import { createPinia } from 'pinia'

const app = createApp(App);
app.use(createPinia());
app.mount('#app');

参考链接
https://www.jianshu.com/p/19de4e5556fa

安装elementplus

注意:element plus只适用于Vue3框架!

npm install element-plus --save

步骤二:在main.js中引入

import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'

const app = createApp(App);
app.use(ElementPlus);
app.mount('#app');

安装路由

npm install vue-router --save

新建route文件夹,新建index.ts

import { createRouter,createWebHistory,RouteRecordRaw } from "vue-router";
import { Nav } from '@/model/router';

const modules = import.meta.glob("../views/**/*.vue");

const navs: Nav[] = [
  {
    path: '/',
    name: 'demo',
    component: 'demo/Demo.vue'
  }
];

function navsToRouter (nav: Nav): RouteRecordRaw {
  return {
    ...nav,
    component: modules[`../views/${nav.component}`]
  };
}

function getRouter (): RouteRecordRaw[] {
  const routes: Array<RouteRecordRaw> = [];
  navs.map(nav => {
    return routes.push(navsToRouter(nav));
  });
  return routes
}

// 通过createRouter方法来创建一个路由 配置history模式
export default createRouter({
  routes: getRouter(),
  history:createWebHistory()
});

在main.js中引用index.js

import router from './router/index'

const app = createApp(App);
app.use(router);
app.mount('#app');

安装eslint

npm install --save-dev eslint eslint-plugin-vue

安装之后 执行

npx eslint --init

请添加图片描述
自动生成.eslintrc.cjs

rules配置文档

配置lint指令
在package.json的scripts添加指令

"lint":"eslint src/**/*.{js,jsx,vue,ts,tsx} --fix",

之后执行npm run lint 也可以自动修复eslint报错。

参考https://blog.csdn.net/qq_42345108/article/details/124386056

安装vite-plugin-eslint包

// 该包的作用是在vite运行时自动检测eslint规范,根据配置在终端显示未通过的校验代码
npm install vite-plugin-eslint -D

安装eslint-parser 及 @babel/core 包

// 该包的作用是允许eslint在babel转换的源代码上运行
npm install @babel/eslint-parser -D

安装sass

npm install --save-dev sass

vite.config.js

安装path

__dirname暴红 找不到名称“__dirname”
解决办法:

npm install --save-dev @types/node

import {defineConfig} from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path';
import eslintPlugin from 'vite-plugin-eslint'

// https://vitejs.dev/config/
export default defineConfig({
    // 配置前端服务地址和端口
    server: {
      hmr: true,
      // 设置反向代理,跨域
      proxy: {
        '/api': {
          target: '后端地址',
          changeOrigin: true,
        },
      },
    },
    plugins: [
      vue(), 
      eslintPlugin({
        include: ['src/**/*.js', 'src/**/*.vue', 'src/*.js', 'src/*.vue'],
        exclude: ['./node_modules/**'],
      })
    ],
    // 打包配置
    build: {
        rollupOptions: {
          // Vite 将转而去抓取这些入口点 来检测需要预构建的依赖项
            input: {
                index: path.resolve(__dirname, 'index.html'),
                login: path.resolve(__dirname, 'login.html'),
            }, output: {
                chunkFileNames: 'static/js/[name]-[hash].js',
                entryFileNames: "static/js/[name]-[hash].js",
                assetFileNames: "static/[ext]/name-[hash].[ext]"
            }
        },
        emptyOutDir: true,
    },
    // 起个别名,在引用资源时,可以用‘@/资源路径’直接访问
    resolve: {
      alias: {
        '@': path.resolve(__dirname, './src'),
      },
    },
})

tsconfig.json

新增

"baseUrl": "./",
    "paths": {
      "@/*": ["src/*"]
    }
{
  "compilerOptions": {
    "target": "ESNext",
    "useDefineForClassFields": true,
    "module": "ESNext",
    "moduleResolution": "Node",
    "strict": true,
    "jsx": "preserve",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "esModuleInterop": true,
    "lib": ["ESNext", "DOM"],
    "skipLibCheck": true,
    "noEmit": true,
    "baseUrl": "./",
    "paths": {
      "@/*": ["src/*"]
    }
  },
  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
  "references": [{ "path": "./tsconfig.node.json" }]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/32080.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言】单词拼写检查

《算法集训传送门》 &#x1f449;引言 铭记于心&#x1f389;✨&#x1f389;我唯一知道的&#xff0c;便是我一无所知&#x1f389;✨&#x1f389;&#x1f496; ❄️我们的算法之路❄️&#x1f496;众所周知&#xff0c;作为一名合格的程序员&#xff0c;算法 能力 是不可…

基于飞书通讯录同步构建本地LDAP服务,打通各应用系统间的组织架构和账号信息

目前飞书社交办公应用成为公司日常沟通办公的协作工具&#xff0c;以及作为各种流程的审批处理系统&#xff0c;HR 也会在飞书上去管理所有员工的状态及组织架构。 随着公司内新部署的业务系统越来越多&#xff0c;例如Jenkins、JIRA、Gitlab、Confluence、禅道等&#xff0c;有…

门店数字化转型| 美发店智慧管理系统

颜值经济时代及他经济崛起&#xff0c;人们更注重自身形象&#xff0c;且追求方便快捷体验好的服务&#xff0c;而且她们越来越理智&#xff0c;不再盲目跟风&#xff0c;关注自身感受&#xff0c;追求便利个性化服务。 美容美发市场规模大但整体线上化程度偏低&#xff0c;下沉…

计算机网络复习——第六章网络层

hhhhh 还是今天的我&#xff0c;今天把这两个肝了&#xff0c;准备27考试&#xff0c;耶耶耶&#xff01;&#xff01;&#xff01;小h加油&#xff01; 《计算机网络》&#xff08;谢希仁&#xff09;内容总结 (javaguide.cn) 重点知识&#xff1a; 域名系统&#xff08;DN…

gptp报文完成时间同步原理

gptp(generalized Precision Time Protocol&#xff0c;广义精确时间同步协议),能够完成微秒级的时间信息同步 gptp定义了两种类型的设备 每一种设备都有自己的本地时钟&#xff0c;设备中用来发布同步时间报文的网络端口被称为主端口&#xff0c;用来接收时间同步报文的被称…

【Flutter】mixin简单使用

序言 之前有个技改任务&#xff0c;把司机学堂代码由原生转到Flutter。过程中遇到一个问题&#xff0c;学堂资料有pdf、视频、和图片&#xff0c;三种学习都会有几个共同的方法&#xff0c;比如学习进度更新、弹窗提示、完成接口调用等。在iOS中是用协议方法来实现&#xff0c…

Paper写作如何正确掌握模板内容?

要写好Paper绝不仅仅是掌握模版或者结构就够了&#xff0c;也不要指望几个小时内搞定一篇(只有经验超级丰富的人才有可能)。你们要做的是&#xff1a; To write a paper well is not only to master the template or structure,but also not to expect to finish one article i…

现代密码学导论-6-完美保密性的局限性

目录 2.3 Limitations of Perfect Secrecy 完美保密性的局限性 THEOREM 2.11 完美保密对密钥空间的要求 THEOREM 2.11 的证明 2.3 Limitations of Perfect Secrecy 完美保密性的局限性 在前一节的最后&#xff0c;我们指出了一次性密码本方案的缺点。事实上&#xff0c;这些…

vue-cli + APIcloud

1.安装node.js 2.全局安装cli3 npm install -g vue/cli 备注&#xff1a;vue cli3官网 https://cli.vuejs.org/zh/ 3.进入工作目录里运行 vue ui&#xff0c;此时会打开vue的UI面板 4.在面板中创建新项目&#xff0c;输入项目名之后点击下一步&#xff0c;选择预设-默认后直接创…

【手把手】教你玩转SpringCloud Alibaba之Seata

1、事务的概念 分布式事务理论 事务的四大特性&#xff1a;A&#xff08;Atomic&#xff09;&#xff1a;原子性&#xff0c;构成事务的所有操作&#xff0c;要么都执行完成&#xff0c;要么全部不执行&#xff0c;不可能出现部分成功部分失 败的情况&#xff1b;C&#xff0…

Vue3路由的使用

文章目录1. 路由的集成和使用2. 声明式导航3. 编程式导航4. 获取页面路由参数数据4.1 动态路由传参和query传参4.2 编程式导航传参5. router-view和keepAlive、transition结合1. 路由的集成和使用 安装&#xff1a; yarn add vue-router4创建 router 目录&#xff0c;并在其下…

传奇单机架设教程,五分钟完成单机架设

准备工具:DBC2000 版本 补丁 传奇架设步骤 1.解压补丁到传奇客户端 2.解压版本到D盘盘符 3.安装配置DBC2000 4.打开引擎控制器启动 5.打开登陆器选择单机127.0.0.1 确保自己的热血传奇客户端是16年以后的 最好是最新版的. 不要使用已经淘汰的10周年客户端 …

Windows技巧之注册表

介绍 注册表是Windows操作系统中的一个核心数据库&#xff0c;其中存放着各种参数&#xff0c;直接控制着Windows的启动、硬件驱动程序的装载以及一些Windows应用程序的运行&#xff0c;从而在整个系统中起着核心作用。这些作用包括了软、硬件的相关配置和状态信息&#xff0c…

这便是智能

🍿*★,*:.☆欢迎您/$:*.★* 🍿

复制集群架构设计技巧

Redis Sentinel设计技巧 Redis Sentinel基本架构 Monitoring Sentinel可以监控Redis节点的状态 Notification Sentinel可以通过API进行集群状态通知 Automatic failover Sentinel实现故障自动切换 Configuration provider Sentinel为client提供发现master节点的发现功能…

WebDAV之葫芦儿·派盘+i简记

i简记 支持webdav方式连接葫芦儿派盘。 每天都去记录生活中所消费的琐碎开支,不仅浪费时间,还有很多广告和理财推销。那有没有纯粹的手机在线记账工具?可以轻松把微信、支付宝账单导入,支持外账入内,还有汇率转换等?答案是肯定的,i简记就是非常实用的在线记账工具。 i…

SwiftUI——如何使用新的NavigationStack和NavigationSplitView(如何页面跳转2.0以及如何制作侧栏)

从 iOS 16 开始&#xff0c;苹果开始弃用原先的NavigationView&#xff0c;以后会逐渐完全淘汰掉。现在开始使用NavigationStack和NavigationSplitView。NavigationStack的效果和原本的NavigationView一样&#xff0c;而NavigationSplitView则和现在 iPadOS 上的NavigationView…

Elastic Search(一)

1. elasticsearch 概述 1.1 简介 官网: https://www.elastic.co/ Elasticsearch (简称ES)是一个分布式、RESTful 风格的搜索和数据分析引擎&#xff0c;能够解决不断涌现出的各种用例。 查询和分析 可以自定义搜索方式: 通过 Elasticsearch&#xff0c;您能够执行及合并多种…

TAPD项目管理:工作流自动化最佳实践

TAPD全称为腾讯敏捷产品研发平台&#xff0c;凝聚了腾讯内部各个产品体系多年敏捷开发的实践精髓。TAPD的【自动化助手】模块通过【触发条件】【执行条件】的规则设定&#xff0c;可以轻松实现自定义子需求、父需求、缺陷管理之间的流转和自动化。 产品/研发的日常工作中&…

mybatis-plus通过inSql实现子查询以及运算符

mybatis-plus通过inSql实现子查询以及运算符一、Controller二、Service1、子查询Service2、运算符Service三、结果一、Controller GetMapping("/queryProductByTypes")public List<ProductDTO> queryProductByTypes(RequestParam("types") List<S…