初始化vue3(构建、配置)

        白弟的记性不好,正所谓好记性不如烂笔头,还是把一些知识写下来更好,这一篇文章主要讲的就是初始化vue3项目的一些常规的配置,自动化部署在另一篇文章,大家可以自行查阅。

一、项目初始化(用的vite2)

npm init vite@2
......
vue
......
vue-ts
...success!

二、插件安装

项目运行时需要的依赖(dependencies)

npm i axios nprogress pinia pinia-plugin-persist qs screenfull vue-router

项目开发时所需要的依赖(devDependencies)

npm i -D unplugin-auto-import unplugin-vue-components sass @types/nprogress @types/qs eslint eslint-config-standard eslint-plugin-import eslint-plugin-node eslint-plugin-promise eslint-plugin-promise eslint-plugin-vue vite-svg-loader prettier typescript @typescript-eslint/parser @vitejs/plugin-vue @vitejs/plugin-vue-jsx@1.3.8

三、插件配置

        自动引入api插件: unplugin-auto-import unplugin-vue-components

在根目录创建 build/plugins/auto-import.pligin.ts 文件,然后配置文件生成和导入配置

export default [
    AutoImport({
        include: [/\.[tj]sx?$/, /\.vue$/, /\.vue\?vue/, /\.md$/], //指定要自动导入的文件类型
        eslintrc: {
            enabled: false, //表示不使用自动导入生成的代码进行编译
            filepath: './auto-import/.eslintrc-auto-import.json',
            globalsPropValue: true,
        },
        imports: ['vue', 'vue-router'],
        resolvers: [ElementPlusResolver()],
        dts: './auto-import/auto-import.d.ts',
    }),
    Components({
        include: [/\.vue$/, /\.vue\?vue/, /\.js$/, /\.jsx$/, /\.ts$/, /\.tsx$/],
        deep: true,//检索子目录
        extensions: ['vue', 'js', 'jsx', 'ts', 'tsx'],//要检索的拓展名
        dirs: ['src/components', 'src/common'], //指定要搜索组件的目录
        dts: './auto-import/components.ts', //指定自动生成的 TypeScript 文件路径
        resolvers: [
            ElementPlusResolver({
                importStyle: 'sass',
            }),
        ],//使用ElementPlusResolver解析sass样式
    }),
    createStyleImportPlugin({
        resolves: [ElementPlusResolve()],
    }),
]

        创建sgv-icon图标组件

在build/pligins中创建 svg-icon.plugin.ts 文件

export default createSvgIconsPlugin({
  iconDirs: [resolve(process.cwd(), 'src/assets/icons/svgs')],
  svgoOptions: true, //默认true,压缩svg
  symbolId: 'icon-[dir]-[name]',
})

        在同一层级创建 index.ts 文件

const vitePlugins: (PluginOption | PluginOption[])[] = [
    vue(),
    vueJsx(),
    svgLoader(),
    AutoImportPlugin,
    svgIconsPlugin,
]

        在plugins目录同级创建index.ts 文件将刚刚封装的暴露出去

import plugins from './plugins/index'
export { plugins }

四、配置 prettier + eslint 

配置eslintrc

在项目根目录创建 .eslintrc.js 文件,其中需要配置的 rules 大家可以按自己需求来制定

module.exports = {
    root: true,
    env: { //定义环境变量 浏览器、node、es6以上
        browser: true,
        node: true,
        es6: true,
    },
    parser: 'vue-eslint-parser', //使用表示使用Vue的ESLint解析器
    parserOptions: { //定义了解析器的选项,包括使用@typescript-eslint/parser作为解析器
        parser: '@typescript-eslint/parser',
        ecmaVersion: 'latest',
        sourceType: 'module',
    },
    extends: [ //定义了扩展的规则,包括Vue的推荐规则、TypeScript的推荐规则和Prettier的推荐规则
        'plugin:vue/vue3-recommended',
        'plugin:@typescript-eslint/recommended',
        'plugin:prettier/recommended',
    ],
    plugins: ['vue', '@typescript-eslint'], //定义了使用的插件,包括Vue和TypeScript
    rules: {
        '@typescript-eslint/ban-ts-ignore': 'off',
        '@typescript-eslint/explicit-function-return-type': 'off',
        '@typescript-eslint/no-explicit-any': 'off',
        '@typescript-eslint/no-var-requires': 'off',
        '@typescript-eslint/no-empty-function': 'off',
        'vue/custom-event-name-casing': 'off',
        'no-use-before-define': 'off',
        '@typescript-eslint/no-use-before-define': 'off',
        '@typescript-eslint/ban-ts-comment': 'off',
        '@typescript-eslint/ban-types': 'off',
        '@typescript-eslint/no-non-null-assertion': 'off',
        '@typescript-eslint/explicit-module-boundary-types': 'off',
        '@typescript-eslint/no-unused-vars': 'error',
        'space-before-function-paren': 'off',
        'vue/attributes-order': 'off',
        'vue/one-component-per-file': 'off',
        'vue/html-closing-bracket-newline': 'off',
        'vue/max-attributes-per-line': 'off',
        'vue/multiline-html-element-content-newline': 'off',
        'vue/singleline-html-element-content-newline': 'off',
        'vue/attribute-hyphenation': 'off',
        'vue/require-default-prop': 'off',
        'vue/require-explicit-emits': 'off',
        'vue/multi-word-component-names': 'off',
        'vue/v-on-event-hyphenation': 'off',
    },
}

在同样的位置创建 .eslintignore 文件

#下列文件不尽兴eslint校验 
node_modules
src/assets/*
*.md
dist
.vscode
/public
配置prettier

在同样的位置创建 .prettierrc.js 文件

module.exports = {
    printWidth: 100, //超过宽度自动换行
    semi: false, //结尾不用分号
    vueIndentScriptAndStyle: true, //启用vue script 缩进
    singleQuote: true, //使用单引号
    trailingComma: 'es5', //遵循es5标准  是否在对象或数组结束后添加逗号
    proseWrap: 'never', //段落文本中始终不换行
    htmlWhitespaceSensitivity: 'strict', //对HTML全局空白敏感
    endOfLine: 'auto', //结束行形式
}

五、配置CICD 文件

        在项目根目录创建 .gitlab-ci.yml、Dockerfile、nginx.conf文件,具体配置就不在这里展示了(主要是我自己也不熟,怕讲错了,sorry)...只是在这里声明有这么一步


六、配置vite.config.ts

我这里主要是配置了这么几项

  1. 插件配置(上面👆暴露出来的插件)
  2. css配置
  3. 打包配置(build)
  4. esbuild配置
  5. 反向代理配置
  6. optimizeDeps 配置
export default defineConfig((config: UserConfig) => {
  const isDev = config.mode === 'development'
  const isProd = config.mode === 'production'
  return {
    base: isDev ? './' : '/',
    plugins: [...plugins],
    resolve: {
      alias: {
        '@': resolve(__dirname, 'src') // 设置 `@` 指向 `src` 目录
      }
    },
    css: {
      preprocessorOptions: {
        scss: {
          additionalData: `@use "@/styles/global.scss" as *;`,
        }
      },
      postcss: {
        plugins: [
          {
            postcssPlugin: 'internal:charset-removal',
            AtRule: {
              charset: (atRule) => {
                if (atRule.name === 'charset') {
                  atRule.remove()
                }
              },
            },
          },
        ],
      },
    },
    build: {
      target: 'esnext', //默认'modules'
      assetsInlineLimit: 4096,
      cssCodeSplit: isProd, //默认true, CSS代码拆分
      sourcemap: !isProd,
      minify: isProd ? 'terser' : 'esbuild', // 'terser' 相对较慢,但大多数情况下构建后的文件体积更小。'esbuild' 最小化混淆更快但构建后的文件相对更大。
      terserOptions: {
        compress: {
          drop_console: isProd, // 生产环境去除console
          drop_debugger: isProd, // 生产环境去除debugger
        },
      },
      rollupOptions: {
        output: {
          // 最小化拆分包
          manualChunks: {
            // 拆分代码,这个就是分包,配置完后自动按需加载,现在还比不上webpack的splitchunk,不过也能用了。
            vue: ['vue', 'vue-router'],
            elementPlus: ['element-plus'],
          },
          // 用于从入口点创建的块的打包输出格式[name]表示文件名,[hash]表示该文件内容hash值
          entryFileNames: 'js/[name].[hash].js',
          // 用于命名代码拆分时创建的共享块的输出命名
          chunkFileNames: 'js/[name].[hash].js',
          // 用于输出静态资源的命名,[ext]表示文件扩展名
          assetFileNames: '[ext]/[name].[hash].[ext]',
        },
      },
    },
    esbuild: {
      jsxFactory: 'h',
      jsxFragment: 'Fragment',
      jsxInject: "import { h } from 'vue';",
    },
    server: {
      port: 5006,
      open: false,
      cors: true,
      // 本地代理
      proxy: {
        '/api': {
          target: targetUrl,
          changeOrigin: true,
        }
      }
    },
    optimizeDeps: {
      include: ['vue', '@element-plus/icons-vue', 'pinia', 'vue-router']
    }
  }
})

这样一个简单的vue3项目就初始化完成了(麻雀虽小但五脏俱全)请诸君查阅~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【竞技宝】DOTA2-梦幻联赛S22:AR命悬一线 XG确定晋级淘汰赛

北京时间2024年2月28日,DOTA2梦幻联赛S22的比赛在昨日进入小组赛第三个比赛日,本次梦幻联赛共有AR、XG、IG三支中国区的队伍参赛,那么经过三日激烈的比赛之后,目前三支队伍的积分情况以及晋级形势如何呢? XG XG是小组…

【vue+element ui】大屏自适应中el-select下拉内容在低分辨率下显示不全问题解决

目录 背景 现象 解决方案 背景 最近要把一个1920px*1080px的大屏改成自适应的;最低适配到1028px*720px; 现象 自适应适配改完之后 将电脑屏幕改成1028px*720px分辨率后,下拉显示正常 通过谷歌浏览器设置Toggle device toolbar为1028px*…

unity使用Registry类将指定内容写入注册表

遇到一个新需求,在exe执行初期把指定内容写入注册表,Playerprefs固然可以写入,但是小白不知道怎么利用Playerprefs写入DWORD类型的数据,因此使用了Registry类 一. 对注册表中键的访问 注册表中共可分为五类 一般在操作时&#…

如何在Linux系统Docker部署Wiki.js容器并结合内网穿透实现远程访问本地知识库

文章目录 1. 安装Docker2. 获取Wiki.js镜像3. 本地服务器打开Wiki.js并添加知识库内容4. 实现公网访问Wiki.js5. 固定Wiki.js公网地址 不管是在企业中还是在自己的个人知识整理上,我们都需要通过某种方式来有条理的组织相应的知识架构,那么一个好的知识整…

GEE必须会教程—栅格影像数据的处理

今天继续GEE的学习,我们依然看到影像数据的处理,今天将涉及到的函数命令时栅格掩膜、栅格裁剪、栅格的波段选择创建、栅格的波段添加、栅格重投影以及栅格的色彩转换。 A.栅格掩膜 掩膜的意思就是以其中一个为边界范围,将边界范围内覆盖的数…

3_相机模型

相机标定对于联系相机测量和真实三维世界测量也很重要。它的重要性在于场景不仅仅是三维的,也是物理单位度量的空间。因此,确定相机的自然单位(像素)与物理单位(如mm)的关系是三维场景重构的重要部分。相机标定的过程既给出相机的几何模型又给出透镜的畸…

typescript 的常用方式

文章目录 前言一、绑定props 默认值的方式:withDefaults1.vue2 的props设置默认值2.vue3 的props设置默认值(1) 不设置默认值的写法(2) 设置默认值的写法(分离模式)(3) 设置默认值的写法(组合模式) 二、定义一个二维数…

Java数据结构之ArrayList与顺序表

一.线性表 什么是线性表,字面意思,就是可以连成一条线的表,这里的线可以是物理上的一条线,也可以是逻辑上的一条线 物理上的一条线就是类似于数组,即它在内存上是有一块连续的空间,叫做顺序表&#xff0c…

python 中常用的热门库介绍

阅读本文之前请参阅-----如何系统的自学python Python 是一种非常流行的编程语言,它的一个主要优势是拥有一个庞大的生态系统,其中包括许多强大的库。这些库为各种任务提供了解决方案,从数据分析到机器学习,从网络爬虫到图像处理。…

面试数据库篇(mysql)- 02定位慢查询和分析

定位慢查询 聚合查询多表查询表数据量过大查询深度分页查询表象:页面加载过慢、接口压测响应时间过长(超过1s) 方案一:开源工具 调试工具:Arthas 运维工具:Prometheus 、Skywalking 方案二:MySQL自带慢日志 慢查询日志记录了所有执行时间超过指定参数(long_query_tim…

openstack常用查看命令

1.查看所有虚拟机 nova list2.列举某个虚拟机的详细信息 nova show ID3.获取所有服务列表 nova service-list4.查看镜像列表 glance image-list5.查看虚拟机规格信息 nova flavor-list6.查看网络信息 neutron net-list7.查看虚拟机网卡信息 nova interface-list8.查看vnc…

TCP的三次握手和四次挥手 | 查看网络状态

三次握手和四次挥手是在计算机网络中用于建立和终止TCP连接的协议。这两个过程是TCP协议的重要组成部分,确保数据的可靠传输。 三次握手指的是在客户端和服务器之间建立连接时的步骤。具体流程如下: 客户端向服务器发送一个连接请求报文段(…

Promise 介绍与基本使用 - 学习笔记

Promise 介绍与基本使用 1、 Promise 是什么?2、创建 Promise 实例对象3、Promise 实例方法4、Promise 的基本工作流程5、实例方法6、静态方法7、async 和 await7.1、关键字7.2、实例7.3、区别7.4、为什么使用 async/await 比较好? 1、 Promise 是什么&a…

【EI会议征稿通知】2024年第三届生物医学与智能系统国际学术会议(IC-BIS 2024)

2024年第三届生物医学与智能系统国际学术会议(IC-BIS 2024) 2024 3rd International Conference on Biomedical and Intelligent Systems (IC-BIS 2024) 2024年第三届生物医学与智能系统国际学术会议(IC-BIS 2024) 将于2024年4月…

皇冠测评:网络电视盒子哪个品牌好?电视盒子排行榜

欢迎各位来到我们的测评频道,本期我们要分享的产品是电视盒子,因很多网友留言不知道网络电视盒子哪个品牌好,我们通过为期一个月的测评后整理了电视盒子排行榜,想买电视盒子的可以看看下面这五款产品,它们各方面表现非…

CSS_实现三角形和聊天气泡框

如何用css画出一个三角形 1、第一步 写一个正常的盒子模型&#xff0c;先给个正方形的div&#xff0c;便于观察&#xff0c;给div设置宽高和背景颜色 <body><div class"box"></div> </body> <style>.box {width: 100px;height: 100px…

如何使用Windows系统电脑无公网ip远程桌面Ubuntu系统

文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安装VNC viewer连接工具4. 内网穿透4.1 安装cpolar【支持使用一键脚本命令安装】4.2 创建隧道映射4.3 测试公网远程访问 5. 配置固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址5.3 测试…

吴恩达机器学习全课程笔记第四篇

目录 前言 P61-P68 激活函数 Softmax算法 P69-P73 Adam算法 更多类型的层 模型评估 P74-P79 偏差和方差 建立表现基准 学习曲线 偏差和方差与神经网络 前言 这是吴恩达机器学习笔记的第四篇&#xff0c;第三篇笔记请见&#xff1a; 吴恩达机器学习全课程笔记第…

leetcode 重复的子字符串

前要推理 以abababab为例&#xff0c;这里最主要的就是根据相等前后缀进行推导 s [ 0123 ] 如 t【 0123 】 f 【01 23 】 后两个分别是前后缀&#xff0c;第一个是总的字符串&#xff0c;然后可以推导 //首先还是算出…

Fastadmin列表根据status或者固定条件来显示按钮的显示和隐藏

根据订单状态&#xff0c;显示“退款操作”按钮显示和隐藏 打开页面的js文件&#xff0c;在操作的这一列里面再加一个button按钮。也可以新起一列&#xff08;我在其他文章有写&#xff09;添加按钮。 row就是选中的这一些所有的数据。 {field: operate, title: __(Operate…
最新文章