0%

这篇文章可能会得罪一部分 VSCode 扩展的作者,但是我实在是看不惯网上很多的文章还在推荐一些已经过时的扩展,我觉得作为 VSCode 的老粉,我有必要写一篇文章科普一下。

在 VSCode 扩展市场目前其实存在着不少下载量特别高但是不应该再被使用的扩展,显然官方是不可能直接给你标出来哪些扩展已经被废弃了,哪些有严重 bug,纯靠扩展作者自觉。很多人新人由于没有深入去了解过,看了一些文章的介绍或者看了扩展市场的简介觉得有用就安装了,其实 VSCode 扩展安装多了会导致不少问题的:

  1. 启动慢,很多扩展是启动 VSCode 的时候就开始加载的,所以不一定是 VSCode 自身变慢了,可能是你扩展装多了。你可以通过在 VSCode 的命令面板调用命令 Developer: Startup Performance 查看各个扩展的在 VSCode 启动时的加载时间。
  2. 扩展之间冲突,比如安装了多个会修改代码颜色的扩展,TODO highlightTodo Tree 之间
  3. 功能重复,例如:IntelliSense for CSS class names in HTMLHTML CSS Support
  4. CPU 占用过高,很多被弃坑的 VSCode 扩展你去看它们 github issues 页面都可以看到一堆 issues 抱怨这个问题,例如 import-cost

本文将主要从两个角度介绍一些不推荐使用的 VSCode 扩展:

  1. 功能已经被 VSCode 内置
  2. 维护不积极的扩展

本文只是给出一些你应该考虑卸载的理由,不是劝说你就应该卸载它们。有些扩展虽然有些问题,但是还是有部分功能没有被内置或者暂时没有更好的替代品,但是我觉得这些事情你应该要清楚。由于本人目前主要是用 VSCode 做前端开发,所以文章中涉及到的扩展大多是和前端相关的。

阅读全文 »

本篇为 从零开始配置 react + typescript 系列第三篇,将带大家完成模板项目的 webpack 配置。整个项目的配置我力求达到以下目标:

灵活: 我在配置 eslint 是选择使用 js 格式而不是 json,就是为了灵活性,使用 js 文件可以让你使用导入其它模块,根据开发环境动态配置,充分发挥 js 语言的能力。

新潮: 我觉得时刻保持对新事物的关注和尝试去使用它是一个优秀的素质。当然,追新很容易碰到坑,但是,没关系,我已经帮你们踩过了,踩不过去我也不会写出来 😂。从我 eslint parserOptions.ecmaVersion 设置为 2020, 还有经常来一发 yarn upgrade --latest 都可以体现出来。

严格: 就像我平时判断相等性我大多数情况都是使用严格等 ===,而不是非严格等 ==,我觉得越严格,分析起来就越清晰,越早能发现问题。例如我么后面会使用一些 webpack 插件来严格检查模块大小写,检查是否有循环依赖。

安逸: 项目中会尽量集成当前前端生态界实用的和能提高开发愉悦性的(换个词就是花里胡哨)工具。

生产 ready:配置的时候针对不同的打包环境针对性优化,并确保能够投入生产环境使用。

本篇将分三大部分介绍:

  1. dev server
  2. 开发环境优化
  3. 生产环境优化

如果读者是初次看到这篇文章,建议先看下前两篇:

  1. 从零开始配置 react + typescript(一):dotfiles
  2. 从零开始配置 react + typescript(二):linters 和 formatter

项目地址:react-typescript-boilerplate

阅读全文 »

从零开始配置 react + typescript(一):dotfiles 介绍了一些最先配置的 dotfiles,本篇将继续介绍 lint 工具 eslintstylelint,代码格式化工具 prettier,用 husky + lint-staged 来实现每次 commit 时只 lint 修改过的代码,以及使用 commitlint 来规范化 commit message。

项目地址:react-typescript-boilerplate

阅读全文 »

之前我写过一篇文章 搭建 react + typescript + ant design 开发环境,现在看来很多内容都已经过时了。但是我看到前不久还有读者给我这篇文章点赞,不更新的话总感觉坑了它们,有点过意不去。但是,如果现在让我再去配置那套环境,我肯定不会再像那篇文章那样配置了,毕竟过了这么长一段时间,很多工具都在发展,我的想法也在改变,那么干脆我就再整一篇新的文章,这是我创作这篇文章的动机之一。

最近一段时间,我写过不少类型的项目,有 chrome 扩展VSCode 扩展electron 等,配置开发环境都是裸写的,并没有使用一些 cli 工具或者第三方的项目模板。因此,我踩过不少坑,也总结了不少的经验。所以另一个创作动机就想总结和分享一下我配置开发环境的最佳实践。

我使用的开发机和编辑器分别是 win10pro-1909VSCode,使用的所有依赖都是最新的,并且文章会不定时更新,确保具有时效性。

文章将按照开发一个模板项目的时间顺序预计分成四篇来写:

  1. dotfiles
  2. linters 和 formatter
  3. webpack
  4. 第三方库集成和优化

项目地址:react-typescript-boilerplate

阅读全文 »

记得以前知乎上看到过一个问题:面试一个 5 年的前端,却连原型链也搞不清楚,满口都是 Vue,React 之类的实现,这样的人该用吗? 。写文章的时候又回去看了下这个问题,300 多个回答,有很多大佬都回答了这个问题,说明这个问题还是挺受关注的。最近几年,随着 ES6 ,TypeScript 及类似的中间语言的流行,我们平时做业务开发很少能接触到原型,基本上都是用 ES6 class 来去更简单的,更直观的实现以前构造器加原型做的事情。

其实在我看来,我觉得原型链是一个非常重要的基础知识。如果一个人说他 C 语言很精通,但是他汇编不熟,你信吗?我觉得 winter 说的挺简洁到位的:

这又涉及到我之前讲过的面试官技巧,面试,是对一个人的能力系统性评价,搞清楚一个人擅长什么不会什么,所以问知识性问题,为了避免误判,一定要大量问、系统化地问。

不会原型很能说明问题,至少他在库的设计方面会有极大劣势,而且可能学习习惯上是有问题的,也有可能他根本就不太会 JS 语言,但是这不意味着凭借一个问题就可以判定这个人不能用。

本文包括以下内容:

  1. JavaScript 原型
  2. 构造器和 prototype
  3. 原型链
  4. 原型的用途
  5. ES6 class 和构造器的关系
  6. 原型继承
  7. JavaScript 和原型相关语法特性
  8. 原型污染
  9. 补充一道最近校招面试碰到的和原型相关的面试题
阅读全文 »

前不久我写了一个 chrome 扩展,作为一个前端弄潮儿,我当然想用上各种前端界最 fashion 的开发工具。于是乎,折腾到最后使用了 webpack + TypeScript + react 这么一套技术栈。在 github 上研究了几个模板项目之后,发现大多数都太初级了,功能太简单,而且有一个我觉应当提供的很基础的功能始终没发现有哪个项目支持,也就是当修改了 content script 之后自动 reload 扩展和刷新注入了 content script 的页面这个问题。这个问题如果解决了,你就不需要每次修改了扩展代码还去 chrome 扩展列表页面点下刷新按钮刷新扩展。最后在研究了 webpack 的热更新机制和查阅了 webpack 和 chome 扩展官方文档之后解决了这个问题。在开发完我那个扩展之后,我便将其提取成了一个模板项目 awesome-chrome-extension-boilerplate

其实我在使用 webpack + TypeScript + react 这套技术栈开发 chrome 扩展时碰到的问题真不少,如果全拿出来讲没个两万字我估计是写不完。这篇文章主要聊聊 webpack 开发 chrome 扩展的热更新问题,并重点讲解我是如何实现修改了 content script 之后自动 reload 扩展和刷新注入了 content script 的页面的,这也是我那个模板的最大特色,也算是给它的 README 做个补充。

在阅读文章之前,希望读者对 webpack 和 chrome 扩展开发有基本的了解。本文的主要内容分为:

  1. 我对 chrome 扩展的理解
  2. 各种页面的热更新问题分析
  3. 如何实现修改了 content script 之后自动 reload 扩展和刷新注入了 content script 的页面
阅读全文 »

相信到了年底,不少前端都准备找工作跳槽了。而作为春招大军的一员,估计很多准备春招的应届生和我一样这个年过得很焦虑。JavaScript 类型是前端面试中考察 JavaScript 基础的常考知识点,经常性第一个问题就是 JavaScript 中有哪些类型。

笔者今年从春招实习到秋招经历了挺多的面试,也总结了一些规律:一般来讲第一轮面试往往就是考察基础,就算你简历很牛逼那也得走个流程啊。而考察基础一般就按照 HTML,CSS,JavaScript,计算机网络,常见的 web 安全,后端知识如数据库,鉴权,再就是最后来两道算法题或智力题或数学题。

最近几个月我都很少像以前那样一天到晚刷掘金和知乎的文章,基本上就是在开源项目中实战学习,我觉得刚入门前端的人确实需要多看一些优质的博客。刚入门更需要广度,随后是广度和深度并行,最后才是深度。其实说人话就是:刚开始入门时因为没怎么写过项目,懂得太少,所以需要多看,被动吸收。到后来有一定广度了,你会发现其实你在写一个项目的时候往往碰到的问题就是因为你的深度不够,这个时候你会更注重深度。最后当你广度慢慢到了一定程度后,由于网络上 99% 的文章都是小白文,你看了标题之后就大概闻的出文章是啥内容,看了对你也没啥用,这个时候你更因该把时间花在一个小的领域,注重深度,深度才是最能体现一个程序员技术价值的地方。

前面唠叨了一堆废话,下面正式开始本文内容。本文内容主要分两部分:

  1. 总结 JavaScript 中各种类型一些值得注意的地方,小技巧和个人心得
  2. JavaScript 如何进行类型判断
阅读全文 »

系统,扎实的 javascript 语言基础是一个优秀的前端工程师必须具备的。在看了一些关于 call,apply,bind 的文章后,我还是打算写下这篇总结,原因有几个。首先,在如今 ES6 大行其道的今天,很多文章中讲述的它们的应用场景其实用 ES6 可以更优雅的解决,但是基本上·没有文章会去提 ES6 的解法。再则,讲它们的实现原理的文章其实不少,但是或多或少实现的有些不够完美,本文将把它们通过代码一一比较完美的实现,让它们不再神秘。不谦虚的说,关于 call,apply,bind 的知识,看这一篇文章就够了。

文章中的源码地址:deep-in-fe

阅读全文 »

9102 年了,前端工程化发展在 nodejs 的基础上已经发展的非常完善了,各种前端构建辅助工具层出不穷。ES6 编译器 babel,css 辅助工具 postcss / sass / less,代码风格检测工具 eslint / prettier / stylelint,git 辅助工具 husky / lint-staged / commitizen / commitlint,自动化构建工具 webpack / gulp / grunt,测试工具 jest / mocha 等等。

这么多开发辅助工具每次写项目都去配置一遍那也太浪费时间了,自己维护一套模板有得时不时去更新。比较方便的配置开发环境还是使用 cli 或者一些热门的 bolierplate。本篇文章将以 react 官方维护的 cli 工具 create-react-app (简称 cra)为基础,以不 eject 的方式去配置 ant design,以及一些 cra 并没有内置的辅助工具。

阅读全文 »