[vue] Vite的使用

news2024/11/20 12:41:16

[vue] Vite的使用

  • 环境
  • package.json文件变更
    • 变更脚手架
    • 修改脚本命令
  • index.html 文件
    • htmlWebpackPlugin 替换为 vite-plugin-html
    • We're sorry but vue3.x-vite-ts doesn't work properly without JavaScript enabled. Please enable it to continue.
  • vite.config.ts 文件变更
    • vite-plugin-html
    • You are running the esm-bundler build of vue-i18n. It is recommended to configure your bundler to explicitly replace feature flag globals with boolean literals to get proper tree-shaking in the final bundle.
    • [vite] Internal server error: [less] Inline JavaScript is not enabled. Is it set in your options?
    • 移除console
      • @vue/cli的console去除方式
      • vite的console去除方式
    • 配置运行的时候自动检测eslint规范
  • 项目中文件的变更
    • i18n.ts:139 ReferenceError: require is not defined
      • @vue/cli 的 webpack 批量文件引入方案
      • vite 批量文件引入方案
    • `ImportMeta上不存在属性 "glob" 的错误`
    • 环境变量的使用
      • @vue/cli获取环境变量的方式
      • vite获取环境变量的方式
    • Uncaught RangeError: Maximum call stack size exceeded
  • eslint配置问题
    • @vue/cli中配置文件.eslintrc.js
    • vite中配置.eslintrc.js
      • .eslintrc.js配置文件
      • 添加 prettier
      • 缩进问题与空格问题
  • 主题设置

之前一直使用的是@vue/cli脚手架,创建新的项目,但是现在该脚手架已经处于维护阶段了,而且官网也推荐使用vite,所以这里记录一下对已有项目的迁移 @vue/cli 迁移成 vite

环境

 "vue": "^3.2.47",
 "vite": "^4.1.4",

package.json文件变更

变更脚手架

1.删除原有脚手架相关包,新增脚手架

npm uninstall @vue/cli-service
npm i vite @vitejs/plugin-vue

2.移除babel?
但是按需引入等功能?

修改脚本命令

 "serve": "vue-cli-service serve",
 "build": "vue-cli-service build",
 "lint": "vue-cli-service lint",
"serve": "vite",
"build": "vite build",
"preview": "vite preview",
"lint": "eslint --ext .js,.vue --ignore-path .gitignore --fix src",

--fix用于自动修复可忽略

index.html 文件

htmlWebpackPlugin 替换为 vite-plugin-html

提示无法使用 htmlWebpackPlugin 插件 ,替换成vite-plugin-html插件

npm uninstall html-webpack-plugin
npm i vite-plugin-html -D

所有关于该插件的使用都需要替换,可以暂时先注释,方便程序的启动

index.html 文件在@vue/cli下是放在根目录的public文件夹中的,但是迁移文档说是改成vite则需要放在根目录下

然后,不使用vite-plugin-html插件的时候没有任何问题,但是发现在启用vite-plugin-html插件时,也即在vite.config.ts中配置该插件时总是报错,并且加载的是public中的index.html文件

所以又将index.html 文件移回了public文件夹中,此时正常启动,vite.config.ts的配置

import { createHtmlPlugin } from "vite-plugin-html";
export default defineConfig(({ command, mode, ssrBuild }) => {

  return {
    plugins: [
      createHtmlPlugin({
        inject: {
          data: {
            title: "Vue3.x",
            online: `${online}`
          }
        }
      }),
    ]
  }

index.html中的使用

<strong>We're sorry but <%= title %> doesn't work properly without JavaScript enabled.Please enable it to continue.</strong>

We’re sorry but vue3.x-vite-ts doesn’t work properly without JavaScript enabled. Please enable it to continue.

运行时报了以上错误

<script type="module" src="/src/main.ts"></script>

迁移文档中有说明,vite 不在自动注入,但是迁移时被忽略了,因此导致了该问题,添加上述代码后正常

vite.config.ts 文件变更

该文件中的变更本人是根据运行时错误提示与需求不断添加的,如果再次迁移可以直接添加,错误可以等报错的时候在添加相应配置

vite-plugin-html

该插件的使用可查看 htmlWebpackPlugin 替换为 vite-plugin-html 一节

You are running the esm-bundler build of vue-i18n. It is recommended to configure your bundler to explicitly replace feature flag globals with boolean literals to get proper tree-shaking in the final bundle.

在vite.config.ts中添加:

resolve: {
  alias: {
    'vue-i18n': "vue-i18n/dist/vue-i18n.esm-browser.js"
  }
}

[vite] Internal server error: [less] Inline JavaScript is not enabled. Is it set in your options?

在vite.config.ts中添加less的配置

   {
     css: {
      preprocessorOptions: {
        less: {
          javascriptEnabled: true
        }
      }
    }
   }

移除console

@vue/cli的console去除方式

babel.config.js

const prodPlugin = []

if (process.env.NODE_ENV === 'production') {
  // 如果是生产环境,则自动清理掉打印的日志,但保留error 与 warn
  prodPlugin.push([
    'transform-remove-console',
    { // 不清理的内容console
      exclude: ['error', 'warn'] 
    }
  ])
}
module.exports = {
  presets: ["@vue/cli-plugin-babel/preset"],
  plugins: [
    [// 按需加载js
      "import",
      {libraryName: "ant-design-vue", libraryDirectory: "es", style: true}
    ],
    ...prodPlugin
  ]
};

vite的console去除方式

npm uninstall core-js
npm uninstall babel-plugin-import
npm uninstall babel-plugin-transform-remove-console

vite.config.js中添加配置

{
  build:{
    terserOptions: {
        compress: {
          //生产环境时移除console
          drop_console: true,
          drop_debugger: true
        }
      },
    esbuild: {//移除方式2
      drop: mode === 'production' ? ['console', 'debugger'] : []
    },

  }
}

配置运行的时候自动检测eslint规范

npm i vite-plugin-eslint

vite.config.ts添加配置

plugins: [
  eslintPlugin({
    include: ["src/**/*.ts", "src/**/*.vue"]
  })
]

项目中文件的变更

i18n.ts:139 ReferenceError: require is not defined

Vite默认使用es6标准的 import 的导入方式,不支持require引入。默认有Vite自己的引入方式

静态资源的引入还比较好解决,可以使用new URL(),但是文件批量引入时的问题有效的解决方案:

@vue/cli 的 webpack 批量文件引入方案

const folderRequireContext: __WebpackModuleApi.RequireContext =
      require.context(
        "../router",
        true,
        /[/\\]route[/\\]([a-z]{2})_?([A-Z]{2})?\.ts$/
      );

vite 批量文件引入方案

懒加载方式,使用的时候才加载:

const fileRequireContext = import.meta.glob("../router/*.ts");
fileRequireContext[fileFullName]().then((content: any) => {
  console.log(content.default)
})

直接加载方式:

const fileRequireContext = import.meta.globEager("../router/*.ts");
Object.keys(fileRequireContext).forEach((fileFullName) => {
  const content=fileRequireContext[fileFullName];
})

因为import.meta无法使用表达式,所以看了一下其它匹配的方式:

  • ../router/router*.ts:所有以router开头的ts文件

  • /**/:表示嵌套的多层文件夹

ImportMeta上不存在属性 "glob" 的错误

vscode使用import.meta.glob时,报以上错误,在tsconfig.json文件中添加配置

{
  "compilerOptions": {
    "types": [
      "vite/client"
    ],
  },
}

环境变量的使用

@vue/cli获取环境变量的方式

process.env.NODE_ENV

vite获取环境变量的方式

import.meta.env.PROD

Uncaught RangeError: Maximum call stack size exceeded

路由的默认配置问题,发现这个问题主要是因为路由配置的跳转什么的出现了问题,本人是因为框架路由跳转子路由时导致的该问题:

router.push("/dashboard")//菜单栏框架
router.push("/about")//内容区展示的路由

因为上述问题导致的, about 是 dashboard 的子路由,所以删除子路由about的跳转后,该问题消失,但是如何在跳转到子路由,在路由 dashboard 的子路由添加默认子路由跳转:

{
    path: "/",
    redirect: "/about",//设置home路径的默认展示页面
  }

还有注意一下,路由是不是正确配置了,在实践过程中还有一个情况会导致该问题,是因为import.meta批量文件懒加载导致路由数组为空,因为404路由都没有,所以导致上述问题!!!

eslint配置问题

之前都是默认生成eslint问题,但是在vite中需要自己配置

@vue/cli中配置文件.eslintrc.js

module.exports = {
  root: true,
  env: {
    es2021: true
  },
  extends: [
    "eslint:recommended",
    "plugin:vue/vue3-essential",
    "@vue/typescript/recommended",
    "@vue/prettier",
    "plugin:prettier/recommended"
  ],
  // parserOptions: {
  //   ecmaVersion: 2020 rome
  // },
  rules: {
    "no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
    "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
    "prettier/prettier": "off",
    // "@typescript-eslint/explicit-module-boundary-types": "off",
    "@typescript-eslint/no-explicit-any": "off",
    // "@typescript-eslint/no-array-constructor":"off",
    "@typescript-eslint/no-empty-function": "warn",
    "@typescript-eslint/no-unused-vars": "off",
    "@typescript-eslint/no-unused-requires": "off",
    // "@typescript-eslint/ban-types": "off",
    // "vue/no-unused-components":"off",
    "vue/multi-word-component-names": "off", //vue文件命名
    // "no-array-constructor": "off",
    // "no-irregular-whitespace": "off",
    "vue/no-unused-vars": "off",
    // 'prefer-const': 'off',
    "linebreak-style": [0, "error", "windows"]
  },
  overrides: [
    {
      files: [
        "**/__tests__/*.{j,t}s?(x)",
        "**/tests/unit/**/*.spec.{j,t}s?(x)"
      ],
      env: {
        jest: true
      }
    }
  ]
};

vite中配置.eslintrc.js

npm i eslint
npx eslint --init

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pYKWbChR-1677746180611)(2023-03-01-10-53-28.png)]

.eslintrc.js配置文件

生成的默认配置文件

module.exports = {
    "env": {
        "es2021": true
    },
    "extends": [
        "eslint:recommended",
        "plugin:vue/vue3-essential",
        "plugin:@typescript-eslint/recommended"
    ],
    "overrides": [
    ],
    "parser": "@typescript-eslint/parser",
    "parserOptions": {
        "ecmaVersion": "latest",
        "sourceType": "module"
    },
    "plugins": [
        "vue",
        "@typescript-eslint"
    ],
    "rules": {
    }
}

添加 prettier

prettier已经初始化过

extends中添加

//初始化插件
npm i eslint-config-prettier
//添加配置
{
  extends: [
    "eslint:recommended",
    // "plugin:vue/vue3-recommended",
    "plugin:vue/vue3-essential",
    "plugin:@typescript-eslint/recommended",
    "eslint-config-prettier",
    "plugin:prettier/recommended"
  ]
}

缩进问题与空格问题

有些页面上显示的是箭头缩进,有些是空格的缩进方式,发现使用替换根本不管用,保存后又变成了箭头
在这里插入图片描述
点击下述内容变更
在这里插入图片描述
弹出
在这里插入图片描述
转换成功
在这里插入图片描述

主题设置

该主题设置暂时没有好的设计方案,之前webpack的已经不可用,等之后有了解决方案在记录

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

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

相关文章

设计模式之行为型模式

四、行为型模式 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务&#xff0c;它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式&#xff0c;前者采用继承机制来在…

[acwing周赛复盘] 第 93 场周赛20230304

[acwing周赛复盘] 第 93 场周赛20230304 一、本周周赛总结二、 4867. 整除数1. 题目描述2. 思路分析3. 代码实现三、 4868. 数字替换1. 题目描述2. 思路分析3. 代码实现四、4869. 异或值1. 题目描述2. 思路分析3. 代码实现六、参考链接一、本周周赛总结 彩笔了&#xff0c;只A…

十大经典排序算法【快速了解】

文章目录一、算法分类二、经典排序算法总览三、算法复杂度四、代码实现一、算法分类 十种常见排序算法可以分为两大类&#xff1a; 比较类排序&#xff1a; 通过比较来决定元素间的相对次序由于其时间复杂度不能突破O(nlogn)&#xff0c;因此也称为非线性时间比较类排序。 非…

电视剧《狂飙》太过诡异,主演各个悄无声息,龙套演员却身价倍增

说起电视剧《狂飙》&#xff0c;相信很多人都有过观看&#xff0c;这部以反腐为题材的大剧&#xff0c;尺度之大近年来绝无仅有。不过观众在被剧情震撼的同时&#xff0c;也发现了一些诡异的事情&#xff0c;比如说主角和配角的反差&#xff0c;让人感觉很不适应。 在电视剧《狂…

51单片机入门————数码管显示

我们在马路上看到的红绿灯&#xff0c;就是由数码管来实现的&#xff0c;就是其中可能加入了一些延时和转换数码管是通过控制138译码器与74HC245来控制数码管的亮灭与数字的显示电路原理图我们先讨论一个数码管数码管有共阳极和共阴极&#xff0c;我们现在使用的STC89C52是共阴…

DataX入门

目录 1. DataX介绍 2. DataX支持的常用数据源类型 3. 设计理念 4. DataX框架设计 4.1. Reader 4.2. Writer 4.3. Framework 5. DataX的运行流程 6. DataX与Sqoop对比 7. 部署 8. 配置详解 9. 案例 同步MySql到HDFS 9.1. 整体结构 9.2. mySqlReader 9.2.1. …

C语言函数:字符串函数及模拟实现strncpy()、strncat()、strncmp()

C语言函数&#xff1a;字符串函数及模拟实现strncpy()、strncat()、strncmp() 在了解strncpy、strncat()、前&#xff0c;需要先了解strcpy()、strncat()&#xff1a; C语言函数&#xff1a;字符串函数及模拟实现strlen() 、strcpy()、 strcat()_srhqwe的博客-CSDN博客 strncp…

包装类详解(装箱,拆箱)

Object 引用可以指向任意类型的对象&#xff0c;但有例外出现了&#xff0c;8 种基本数据类型不是对象&#xff0c;那岂不是刚才的泛型机制要失效了&#xff1f;&#xff08;泛型详解._阿瞒有我良计15的博客-CSDN博客&#xff09; 实际上也确实如此&#xff0c;为了解决这个问题…

数据结构与算法-二叉树-序列化与反序列化

可能性探究:我们可以想到的是只有一棵树按照某个序是唯一确定要给结构的情况才可能被序列化和反序列化&#xff0c;比如我们对于以下的二叉树可以找到它的先序、中序、后序如下&#xff1a; 根据它的先序和后序我们找不到任何其他可能的树&#xff0c;所以可以根据先序和后序去…

NLP预训练模型

Models Corpus RoBERTa: A Robustly Optimized BERT Pretraining Approach 与BERT主要区别在于&#xff1a; large mini-batches 保持总训练tokens数一致&#xff0c;使用更大的学习率、更大的batch size&#xff0c;adam β20.98\beta_20.98β2​0.98&#xff1b;dynamic ma…

aws eks 集群初始化过程中pause容器的启动逻辑

eks集群默认策略在磁盘使用量达到threshold时会清除镜像&#xff0c;其中pause镜像也可能会被清除 https://aws.amazon.com/cn/premiumsupport/knowledge-center/eks-worker-nodes-image-cache/ pause容器能够为pod创建初始的名称空间&#xff0c;pod的内的容器共享其中的网络空…

库函数qsort 的模拟实现

在之前了解了库函数qsort的使用之后 我们来模拟实现一下上篇有介绍 qsort的底层实现是快速排序 由于害怕没有人了解过快速排序 我就用大家熟知的冒泡排序进行模拟实现 先来展示完整代码 以下代码为升序排序 如果降序将冒泡排序中的大于号改为小于号就可以了#define _CRT_SECURE…

malloc实现原理探究

2021年末面试蔚来汽车&#xff0c;面试官考察了malloc/free的实现机制。当时看过相关的文章&#xff0c;有一点印象&#xff0c;稍微说了一点东西&#xff0c;不过自己感到不满意。今天尝试研究malloc的实现细节&#xff0c;看了几篇博文&#xff0c;发现众说纷纭&#xff0c;且…

MySql启动错误(Mac系统 安装 mysql-8.0.32-macos13-arm64 后每次点击启动 无法启动) --- 已解决

MySql启动的时候: 立即变红! 查看日志如下: 2023-03-04T14:18:01.089671Z 0 [System] [MY-010910] [Server] /usr/local/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.32) MySQL Community Server - GPL. 2023-03-04T14:18:10.304169Z 0 [System] [MY-010116] [Server]…

【EDA工具使用】——VCS和Verdi的联合仿真的简单使用

目录 1.芯片开发所需的工具环境 2.编译仿真工具 3.三步式混合编译仿真&#xff08;最常用&#xff09;​编辑 4.两步式混合编译仿真​编辑 5.VCS的使用 ​6.verdi的使用 1.产生fsdb文件的两种方法​编辑 1.芯片开发所需的工具环境 2.编译仿真工具 3.三步式混合编译仿真…

按位与为零的三元组[掩码+异或的作用]

掩码异或的作用前言一、按位与为零的三元组二、统计分组1、map统计分组2、异或掩码总结参考资料前言 当a b 0时&#xff0c;我们能够很清楚的知道b是个什么值&#xff0c;b 0 - a -a&#xff0c;如果当a & b 0时&#xff0c;我们能够很清楚的知道b是什么值吗&#xf…

Python GUI界面编程-初识

图形用户界面(Graphical User Interface&#xff0c;简称 GUI&#xff0c;又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比&#xff0c;图形界面对于用户来说在视觉上更易于接受。然而这界面若要通过在显示屏的特定位置&#xf…

HiveSQL一天一个小技巧:如何精准计算非连续日期累计值【闪电快车面试题】

0 需 求稀疏字段累计求和问题1 问题分析根据图片中数据变换的形式&#xff0c;可以看出是根据字段term补齐数据中缺失的日期&#xff0c;term为连续日期的个数&#xff0c;当为12时&#xff0c;表明由2018-12-21到2019-01-02连续日期个数为12&#xff0c;当补齐日期后&#xff…

sklearn中的逻辑回归

目录 一.名为“回归”的分类器 二.逻辑回归的优点 三.sklearn中的逻辑回归 四.linear_model.LogisticRegression 五.penalty & C(正则化) 六.逻辑回归中的特征工程 1.业务选择 2.PCA和SVD一般不用 3.统计方法可以使用&#xff0c;但不是非常必要 4.高效的嵌入法e…

【vulhub漏洞复现】CVE-2013-4547 Nginx 文件名逻辑漏洞

一、漏洞详情影响版本 Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7通过%00截断绕过后缀名的限制&#xff0c;使上传的php内容文件被解析执行。当Nginx得到一个用户请求时&#xff0c;首先对url进行解析&#xff0c;进行正则匹配&#xff0c;如果匹配到以.php后缀结尾的文件名&#x…