记得把每一次面试当做经验积累英语,Webpack5 搭建 Vue3 + TS 项目,前端面试试题

各位小伙伴,我回广州了,今天开始更新了。

作者:Corwien


来源:SegmentFault 思否社区


1. 前言


笔者两年前曾写过一篇文章《Webpack4 搭建 Vue 项目》,后来随着 webpack5 和 vue3 的面世,一直想升级下我这个 createVue 项目,但是苦于没有时间(其实是因为懒),一直拖延至今。捣鼓了好几天,终于搭建好整个项目,因此仅以此文记录升级搭建的过程。

PS: 其实也可以用官方脚手架搭建的,为何要自己从头做起呢?有脚手架我不用,我就折腾。哎,就是玩儿~???

2. 准备工作


为何升级?除了折腾外,便是享受新版本带给我们的新特性体验。

Webpack5 的新特性

  • 持久化缓存

  • moduleIds & chunkIds 的优化

  • 更智能的 tree shaking

  • Module Federation

Vue3 的新特性

  • 更小

  • 更快

  • 加强 TypeScript 支持

  • 加强 API 设计一致性

  • 提高自身可维护性

  • 开放更多底层功能

确定项目技术栈

  • 编程语言:TypeScript 4.2.4

  • 构建工具:[Webpack 5.33.2]()

  • 前端框架:Vue 3.0.11

  • 路由工具:Vue Router 4.0.6

  • 状态管理:Vuex 4.0.0

  • CSS 预编译:Sass / Less

  • HTTP 工具:Axios

  • Git Hook 工具:Husky + Lint-staged

  • 代码规范:EditorConfig + Prettier + ESLint

  • 提交规范:Commitlint

  • 构建部署:Travis

3. 项目搭建


此文并不是从零搭建,而是在 createVue@v1.0.0 的基础上修改搭建,如若看不懂,可以先看《Webpack4 搭建 Vue 项目》,跟着一步步搭建,后再看此文升级

创建 createVue 文件夹,进入该文件夹, npm init 初始化项目

老规矩,安装 webpack 四件套npm i webpack webpack-cli webpack-dev-server webpack-merge --save-dev

当前使用版本:

“webpack”: “^5.33.2”,

“webpack-bundle-analyzer”: “^4.4.1”,

“webpack-cli”: “^4.6.0”,

“webpack-dev-server”: “^3.11.2”,

“webpack-merge”: “^5.7.3”,

webpack5 启动开发服务器命令与之前有所变化,从 webpack-dev-server 转变为 webpack serve, 因此 package.json 中 script 的 start 修改为: "start": "webpack serve --progress --hot --inline --config build/webpack.dev.js"

  1. 创建相应文件

与之前没有太大差异。增加变动的有一下几点:

1). 持久化缓存,增加 cache 配置. v5 中缓存默认是 memory,修改设置"filesystem"写入硬盘

// webpack.dev.js

module.exports = merge(common, {

cache: {

type: ‘filesystem’,

}

//…

}

2). 去除插件 clean-webpack-plugin(v5支持),webpack.HashedModuleIdsPlugin(v5更好的 moduleIds & chunkIds),HardSourceWebpackPlugin(v5支持),happypack(v5不兼容)

安装 vue 核心解析插件

解析插件有所不同,从 vue-template-compiler 变成了 @vue/compiler-sfcvue-loader 保持不变。 npm i vue-loader @vue/compiler-sfc --save-dev

// 当前我使用版本

“vue-loader”: “^16.2.0”,

“@vue/compiler-sfc”: “^3.0.11”,

安装 vue3 及相关库,添加 vue 类型文件

npm i vue@next vuex@4.0.0-rc.1 vue-router --save

src 文件夹下添加 shims-vue.d.ts 文件,解决 vue 类型报错

// shims-vue.d.ts

declare module ‘*.vue’ {

import type { DefineComponent } from ‘vue’

const component: DefineComponent<{}, {}, any>

export default component

}

安装 html 模板解析插件

npm i html-webpack-plugin --save-dev

安装 typescript 及解析插件

npm i typescript ts-loader --save-dev

配置ts-loader解析:

// webpack.base.js

// rules

{

test: /.(t|j)s$/,

exclude: /node_modules/,

use: [

{

loader: ‘ts-loader’,

options: {

// 指定特定的ts编译配置,为了区分脚本的ts配置

configFile: path.resolve(__dirname, ‘…/tsconfig.loader.json’),

// 对应文件添加个.ts或.tsx后缀

appendTsSuffixTo: [/.vue$/],

},

},

],

}

ts-loader 为单进程执行类型检查和转译,因此效率有些慢,可以用多进程方案:即关闭ts-loader的类型检查,类型检查由 fork-ts-checker-webpack-plugin 插件执行。npm i fork-ts-checker-webpack-plugin --save-dev

// webpack.base.js

// rules

{

test: /.(t|j)s$/,

exclude: /node_modules/,

use: [

{

loader: ‘ts-loader’,

options: {

// 指定特定的ts编译配置,为了区分脚本的ts配置

configFile: path.resolve(__dirname, ‘…/tsconfig.loader.json’),

// 对应文件添加个.ts或.tsx后缀

appendTsSuffixTo: [/.vue$/],

transpileOnly: true, // ? 关闭类型检查,即只进行转译

},

},

],

}

// plugins push

new ForkTsCheckerWebpackPlugin()

至此项目基本可以跑起来了,那么有个问题了:Ts 可以编译为指定版本的 js,那么还需要 babel 么?

tsc 的 target 只转译语法,不集成 polyfill,所以还是得要 babel。

比如把箭头函数转成普通 function、aysnc + await 变成 Promise.then,这是语法转译;

但你运行环境里如果没有 Promise.prototype.finally,那没有就还是没有。

因此我们项目里还是需要 babel.

Webpack 转译 Typescript 现有方案:

综合考虑性能和扩展性,目前比较推荐的是 babel+fork-ts-checker-webpack-plugin 方案。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

学习分享,共勉

题外话,毕竟我工作多年,深知技术改革和创新的方向,Flutter作为跨平台开发技术、Flutter以其美观、快速、高效、开放等优势迅速俘获人心

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

lutter以其美观、快速、高效、开放等优势迅速俘获人心

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

[外链图片转存中…(img-zCulQkkk-1712347137257)]

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值