前端工程化 | vue3+ts+jsx+sass+eslint+prettier 配置化全流程

news2024/12/26 23:09:50

起因: 

前端开发是一个工程化的流程。 包括持续集成、持续部署。

我认为集成 的第一方面就是开发,在前端项目开发中,需要保证代码格式规范的统一、代码质量、提交的规划。而这些要求需要通过各种插件来保证规范化和流程化开发。 如何配置这些插件,这些插件各自的功能是什么? 尽管不知道这些也能进行开发,但是,一旦出现问题,就会出现两眼一抹黑的情况,而随着工作年限的增长,我们需要尽快对这些东西进行掌握。 这也行,我写这篇文章的原因。

一、创建项目

这里我们打包工具使用 vite 而不是webpack。 关于webpack和vite的差别可以参考:***。

我们通过 npm init vue npm init vue 命令来初始化一个新的vue 项目。这里我们不通过脚手架来创建项目。所以在选择时,jsx、ts、eslint、单测的选择都是no。

过程如下图所示:

 这样,我们就创建了一个纯净的vue 项目。

为了方便后续改造,建议这里只保留一个 app.vue 文件。 其余的vue 文件都删掉。

二、引入插件

2.1 引入jsx

尽管vue为了开发的流畅,提供了template开发语法,但在实际开发中,还是会受限。 然而在某些使用场景下,我们真的需要用到 JavaScript 完全的编程能力。这时渲染函数就派上用场了。 而JSX 就是贴近渲染函数开发的一种形式。

我们可以通过 安装 @vitejs/plugin-vue-jsx 插件来进行jsx 开发。

因为这个插件是用来辅助开发的,所以最好将其安装在 devdependency 中
npm i @vitejs/plugin-vue-jsx -D

然后在 vite.config.js 中引入 插件,并将其添加至 plugins 中。 

// vite.config.js
import vueJsx from '@vitejs/plugin-vue-jsx'

export default {
  plugins: [
    vueJsx({
      // options are passed on to @vue/babel-plugin-jsx
    }),
  ],
}

并将app.vue 文件改为 jsx 文件即可。最简单的jsx 文件如下所示:

import { defineComponent, ref } from 'vue'
export default defineComponent({
  setup() {
    return () => (
      <div>
        Hello world!
      </div>
    )
  }
})

这里不具体介绍JSX 和 template 的写法区别。

2.2 引入ts

ts 也是我们在开发过程中,提升开发质量的保证。 虽然现在也有一些人诟病,任何地方都要添加类型是一件非常令人痛苦的事情,但总比,时刻都是随意推断类型来的舒适些。

通过下面的命令安装 ts。

npm install --save-dev typescript

@vue/cli-plugin-typescript内部预置了ts-loader的配置,无需单独配置 @vue/cli-plugin-typescript介绍

安装 ts-loader 等

npm install --save-dev @vue/cli-plugin-typescript

添加 tsconfig 配置,一个可以参考的配置

{
  // 编译过程中的参数
  "compilerOptions": {
    // 在 .tsx文件里支持JSX: "React"或 "Preserve"。因为是vue 中的编译,所以是preserve
    "jsx": "preserve",
    // 指定ECMAScript目标版本
    "target": "esnext",
    "module": "esnext",
    // 启用严格检查
    "strict": true,
    // 从 tslib 导入辅助工具函数(比如 __extends, __rest等)
    "importHelpers": true,
    // 决定如何处理模块。或者是"Node"对于Node.js/io.js,或者是"Classic"(默认)。查看模块解析了解详情。
    "moduleResolution": "node",
    // 启用实验性的ES装饰器。
    "experimentalDecorators": true,
    // 显示详细的诊段信息。
    "esModuleInterop": true,
    // 允许从没有设置默认导出的模块中默认导入。这并不影响代码的输出,仅为了类型检查。
    "allowSyntheticDefaultImports": true,
    // 生成相应的 .map文件。
    "sourceMap": true,
    "baseUrl": ".",
    // 允许编译javascript文件,默认为false
    "allowJs": false,
    // 要包含的类型声明文件名列表。
    "types": [
      "webpack-env"
    ],
    // 模块名到基于 baseUrl的路径映射的列表。
    "paths": {
      "@/*": [
        "src/*"
      ]
    },
    // 编译过程中需要引入的库文件的列表。
    "lib": [
      "esnext",
      "dom",
      "dom.iterable",
      "scripthost"
    ]
  },
  // 需要编译的文件
  "include": [
    "src/**/*.ts",
    "src/**/*.d.ts",
    "src/**/*.tsx",
    "src/**/*.vue"
  ],
  // 不需要编译的文件
  "exclude": [
    "node_modules"
  ]
}

2.3 引入 sass

Vite 提供了对 .scss, .sass, .less, .styl.stylus 文件的内置支持。因此没有必要为它们安装特定的 Vite 插件,但必须安装相应的预处理器依赖,依赖安装完项目就可以直接解析less文件了。

$ npm install less less-loader -D 
# or 
$ yarn add less less-loader -D

注意这里有个坑,less 和 less-loader 需要写到 devDependencies 里面,否则运行会报错。 

2.4 引入 eslint & 引入prettier 

这两个的引入我是参考的 vue3+ts+vite项目中使用eslint+prettier+stylelint+husky指南 - 掘金

这篇文章讲的很详细了,我就不在此班门弄斧了。 

三、引用

1、彻底弄懂 `npm init vue@latest` 发生了什么 - 掘金  

2、渲染函数 & JSX | Vue.js

3、Facebook JSX文章 

4、这篇文章介绍了jsx 写法和template写法的区别,以及jsx 写法的好处。探索 Vue 3 中的 JSX - 掘金

5、tsconfig 官方文档: 编译选项 · TypeScript中文网 · TypeScript——JavaScript的超集

四、总结

这里只是一个简单的配置。 甚至还不敢保证打包之后的文件能否访问。

对每个配置的作用也没有解释清楚。

这里列出在写的过程中,存疑的问题,待后续填坑。

1、vite 和 webpack的区别是什么?

2、sass 和 scss 等,和css 相比的区别是什么? 有什么规范?在项目中有什么实战?为了实现在编写过程中的方便,以及编译之后能在浏览器端正常运行,需要使用什么插件?各个插件的作用是什么?

3、ts 也是在开发阶段引入,编译之后,是 纯js 吗?配置的tsconfig 是在哪里运行的?

4、eslint 和prettier安装之后又是在哪里运行的?各自的配置中是什么含义? 

等把这些问题解决了之后,才算对开发阶段的工程化有了一个简单的认识。

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

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

相关文章

大数据的金融数据读取及分析(二)

一、注册和获取token 参考大数据的金融数据读取及分析&#xff08;一&#xff09;大数据的金融数据读取及分析&#xff08;-&#xff09;_石工记的博客-CSDN博客 二、获取股市信息 需注意的是&#xff0c;利用tushare接口获取部分信息时对积分有不同的要求&#xff0c;积分不…

后室主题 Game Jam

在后室主题 Game Jam 中探索无尽的深渊&#xff01; 向所有富有冒险精神的游戏开发者和创作者发出召集令&#xff01;准备好潜入未知领域&#xff0c;将令人毛骨悚然的后室之谜变为现实吗&#xff1f;加入我们&#xff0c;参加与 Game Maker 合作举办的令人振奋的游戏竞赛吧&am…

【C语言】GNU make 和 Makefile :构建工具与构建描述文件的力量

本文将详细介绍make和Makefile&#xff0c;它们是软件开发中常用的构建工具和构建描述文件。本文将探讨make的作用、原理和用法&#xff0c;以及Makefile的结构、语法和常见用法。通过了解这些工具&#xff0c;开发者可以更高效地管理和构建复杂的软件项目。 引言一、make1.1 m…

Java8新特性详解

陈老老老板 说明&#xff1a;新的专栏&#xff0c;本专栏专门讲Java8新特性&#xff0c;把平时遇到的问题与Java8的写法进行总结&#xff0c;需要注意的地方都标红了&#xff0c;一起加油。 本文是介绍Java8新特性与常用方法&#xff08;此篇只做大体介绍了解&#xff0c;之后会…

使用OpenCV工具包实现人脸检测与人脸识别,包括传统视觉和深度学习方法(最全整理!)

使用OpenCV工具包实现人脸检测与人脸识别&#xff08;最全整理&#xff01;&#xff09; OpenCV实现人脸检测OpenCV人脸检测方法基于Haar特征的人脸检测Haar级联检测器预训练模型下载Haar 级联分类器OpenCV-Python实现 基于深度学习的人脸检测传统视觉方法与深度学习方法对比 O…

three.js 最小环境搭建

完整目录: 1、html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><st…

专利优先权应在什么时候提出

专利优先权要求应当在3个月内提交第一次提出的专利申请文件的副本&#xff1b;未提出书面声明或者逾期未提交专利申请文件副本的&#xff0c;视为未要求优先权。 申请人就相同主题的发明或实用新型在外国第一次提出专利申请之日起十二个月内&#xff0c;或者就相同主题的外观设…

【STM32智能车】智能车专题知识补充

【STM32智能车】智能车专题知识补充 智能车专题智能车的定义和发展历程。智能车的特点和优势。智能车的关键技术智能车的应用场景&#xff0c;如出租车、物流配送、公共交通等。智能车在环境保护、交通安全、经济发展等方面的作用。智能车发展面临的挑战和机遇 智能车专题 本专…

使用 Elasticsearch 1

了解如何创建索引&#xff0c;添加&#xff0c;删除&#xff0c;更新文档 参考文档 开始使用 Elasticsearch 1 本文用到Elasticsearch和Kibana 可以看之前的两篇先安装好 Elasticsearch 安装 Kibana安装 Elasticsearch 里的接口都是通过 REST 接口来实现的。 GET 读取数…

Scrapy框架之MongoDB通过配置文件管理参数--Linux安装MongoDB--图形管理工具

目录 MongoDB通过配置文件 问题 解决方案 步骤 提示 Linux安装MongoDB 环境 下载依赖与安装包 解压安装 MongoDB GUI管理工具 独立软件GUI软件 Robo 3T使用 VSCode集成GUI插件 MongoDB通过配置文件 问题 启动MongoDB时&#xff0c;编写参数太麻烦 解决方案 通过配…

【PCL】(三)读写PCD文件

文章目录 &#xff08;三&#xff09;读写PCD文件写读 &#xff08;三&#xff09;读写PCD文件 写 首先&#xff0c;创建一个名为pcd_write.cpp的文件&#xff0c;并在其中写入以下代码&#xff1a; #include <iostream> #include <pcl/io/pcd_io.h> #include &…

【项目实战】大文件断点续传,搞起

今天给大家分享的又是一篇实战文章&#xff0c;也是最近私活里遇到的&#xff0c;万能的互联网给了我办法&#xff0c;分享一下。 背景 最近接到一个新的需求&#xff0c;需要上传2G左右的视频文件&#xff0c;用测试环境的OSS试了一下&#xff0c;上传需要十几分钟&#xff…

Session

什么是Session&#xff1f; 服务器会给每个用户&#xff08;浏览器&#xff09;创建一个Session对象。一个Session独占一个浏览器&#xff0c;只要浏览器没有关闭&#xff0c;Session就一直存在。用户登陆后&#xff0c;整个网站都可以访问&#xff01;&#xff08;保存用户的…

掌握imgproc组件:opencv-直方图与匹配

直方图与匹配 1. 图像直方图概述2.直方图的计算与绘制2.1 计算直方图&#xff1a;calcHist()函数2.2 找寻最值&#xff1a;minMAxLoc()函数2.3 示例程序&#xff1a;绘制H-S直方图 3.直方图对比3.1 对比直方图&#xff1a;compareHist()函数3.2 示例程序&#xff1a;直方图对比…

Dubbo接口级服务发现-数据结构

目录 Dubbo服务治理易用性的原理&#xff1a; URL地址数据划分&#xff1a; Dubbo接口级服务发现---易用性的代价 Proposal&#xff0c;适应云原生、更大规模集群的服务发现类型。 Dubbo3应用级服务发现---基本原理 Dubbo负载均衡机制 常规负载均衡算法 负载均衡策略&am…

leetcode526. 优美的排列(回溯算法-java)

优美的排列 leetcode526. 优美的排列题目描述接替思路代码演示: 动态规划专题 leetcode526. 优美的排列 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/beautiful-arrangement 题目描述 假设有从 1 到 n 的 n 个整数。用…

【Python 随练】判断一个5位数是否为回文数

题目&#xff1a; 一个 5 位数&#xff0c;判断它是不是回文数。即 12321 是回文数 &#xff0c;个位与万位相同&#xff0c;十位与千位相同。 简介&#xff1a; 在本篇博客中&#xff0c;我们将解决一个编程问题&#xff1a;判断一个5位数是否为回文数。回文数是指从左到右…

数字IC前端学习笔记:近期最少使用(LRU)算法

相关文章 数字IC前端学习笔记&#xff1a;LSFR&#xff08;线性反馈移位寄存器&#xff09; 数字IC前端学习笔记&#xff1a;跨时钟域信号同步 数字IC前端学习笔记&#xff1a;信号同步和边沿检测 数字IC前端学习笔记&#xff1a;锁存器Latch的综合 数字IC前端学习笔记&am…

Java新特性-Functon接口

Java新特性-Functon接口 ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ Spring专栏&#x1f449;https://blog.csdn.net/weixin_53580595/category_12279588.html Sprin…