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

起因: 

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

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

一、创建项目

这里我们打包工具使用 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.hqwc.cn/news/2303.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue中如何进行数据导入与Excel导入

Vue中如何进行数据导入与Excel导入 Vue是一款非常流行的JavaScript框架&#xff0c;它提供了一套用于构建用户界面的工具和库。在Vue中&#xff0c;我们可以使用多种方式来导入数据&#xff0c;包括从服务器获取数据、从本地存储获取数据、从文件中读取数据等等。其中&#xf…

Linux进程信号【信号处理】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 文章目录 &#x1f307;前言&#x1f3d9;️正文1、信号的处理时机1.1、处理情况1.2、"合适" 的时机 2、用户态与内…

【Redis】不卡壳的 Redis 学习之路:事务

本文是Redis系列第三篇&#xff0c;前两篇欢迎移步 【Redis】不卡壳的 Redis 学习之路&#xff1a;从十大数据类型开始入手_AQin1012的博客-CSDN博客关于Redis的数据类型&#xff0c;各个文章总有些小不同&#xff0c;我们这里讨论的是Redis 7.0&#xff0c;为确保准确&#x…

MFC加载3ds模型初步

网上下一个资源&#xff0c;名为 OpenGL三维场景绘制.rar&#xff1b; 看一下它是用MFC和opengl&#xff0c;自己绘制三维场景&#xff1b; 运行一下&#xff0c;有一个exe可以运行&#xff1b; 有一个较新版本的不能运行&#xff1b;这应是缺少VC运行库&#xff1b; 下面单独…

K8S集群搭建

K8S集群搭建 1. 基础环境 IP节点名称域名规格10.1.2.111k8s-master-1master01.k8s.io4核8G&#xff0c;50G10.1.2.112k8s-master-2master02.k8s.io4核8G&#xff0c;50G10.1.2.113k8s-cluster-endpoint&#xff0c;没有具体节点&#xff0c;只vipmaster.k8s.io10.1.2.180k8s-…

基于深度学习的高精度足球检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度足球检测识别系统可用于日常生活中或野外来检测与定位足球目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的足球目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

Unity | HDRP高清渲染管线学习笔记:材质系统Lit着色器

目录 一、Lit着色器 1. Surface Options 2. Surface Inputs&#xff08;表面输入&#xff09; 3. Transparency Inputs 二、HDRP渲染优先级 目录 一、Lit着色器 1. Surface Options 2. Surface Inputs&#xff08;表面输入&#xff09; 3. Transparency Inputs 4. Em…

【C/C++】拷贝构造函数的调用 使用方法

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

【shell】expect命令详解:用expect实现自动化交互式操作

文章目录 一. 运用场景二. 语法说明三. 例子1. scp文件传输自动化2. ssh远程登录3. 切到root用户4. 创建ssh key5. ssh到一个节点创建用户 一. 运用场景 expect主要应用于自动化交互式操作的场景&#xff0c;借助Expect处理交互的命令&#xff0c;可以将交互过程如&#xff1a…

037:mapboxGL输入经纬度,地址坐标转换,弹出位置点地址信息

第037个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中输入经纬度,地址坐标转换,弹出位置点地址信息. 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共158行)相关API参考:专栏目标示例效果 配置方式…

LeetCode 2. 两数相加

文章目录 1. 题目描述2. 解题代码 1. 题目描述 链接&#xff1a;https://leetcode.cn/problems/add-two-numbers/ 2. 解题代码 public ListNode AddTwoNumber(ListNode l1, ListNode l2) {ListNode head new ListNode();ListNode cur head;int carry 0;while (l1 ! null…