文章
已发布的全部长文。
package-lock.json 的意义何在
发布于更新于packagelock.json / yarn.lock 用以锁定版本号,保证开发环境与生产环境的一致性,避免出现不兼容 API 导致生产环境报错 在这个问题之前,需要了解下什么是 semver : $1。 当我们在 npm i 某个依赖时,默认的版本号是最新版本号 ^1.2.3 ,以 ^ 开头可最大限度地使用新特性,但是某些库不遵循该依
monorepo 的发展
发布于更新于monorepo 即一个 repo,多个 package。 + lerna + npm v7 + yarn + pnpm + react + vue + babel + eslint 当 node
生产环境中使用 npm ci 代替 npm i
发布于更新于乍一眼看 npm ci ,CI,恩,看这名字就很适合放在持续集成中。事实也是如此,它更快,更严格,也更适合于放在 CI 中,至于为什么这么说,将会在以下分别做介绍。 npm ci 基于一个独立的库 $1 安装依赖,而它拥有和 npm install 兼容的 API。当它安装依赖时,默认是缓存优先的,它会充分利用缓存,从而加速装包。 直接从
在生产环境中优化你的 npm i 速度
发布于更新于对于一个前端应用,或者说是一个 Node 应用,在 CICD pipeline 中,无论是构建,测试,部署,其中必不可少的环节就是依赖安装: npm i
如何对 npm 包进行升级
发布于更新于npm 的版本号为 semver 规范,由 [major, minor, patch] 三部分组成,其中 + major: 当你发了一个含有 Breaking Change 的 API + minor: 当你新增了一个向后兼容的功能时 + patch: 当你修复了一个向后兼容的 Bug 时 假设 react 当前版本号为 17.0.1 ,
如何对 npm package 进行发包
发布于更新于在发布公共 package 之前,需要在 $1进行注册一个账号。 随后,在本地(需要发包的地方)执行命令 npm login ,进行交互式操作并且登录。 发布一个 npm 包之前,填写 package.json 中以下三项最重要的字段。假设此时包的名称为 @shanyue/just-demo 之后执行 npm publish 发包即可。
如何临时修复 node_modules 某个库的紧急问题?
发布于更新于假设 lodash 有一个 Bug,影响线上开发,应该怎么办? 答: 三步走。 1. 在 Github 提交 Pull Request,修复 Bug,等待合并 1. 合并 PR 后,等待新版本发包 1. 升级项目中的 lodash 依赖 很合理很规范的一个流程,但是它一个最大的问题就是,太慢了,三步走完黄花菜都凉了。 此时可直接上手修改
如何找到一个合适的 npm 库
发布于更新于由于业务需求,我需要一个 React 的弹框组件,我应如何快速选择一个合适的 npm 库? 在错误的网址进行搜索,事倍功半: 1. ~~某度~~ 在正确的网址进行搜索,事半功倍: 1. $1: 官方网站,权威网站 2. $1 3. $1 不要使用错误冗长的关键词搜索: ~~我需要一个 React 的弹框组件~~。 请使用正确的关键词进行搜
前端工程化实践
发布于更新于1. $1 1. $1 1. $1 1. $1 1. $1 1. $1 1. $1 1. $1 1. $1 以下 TODO 1. 如何部署 SSR 应用 1. 图片处理与工程化 1. $1 1. CDN 下 index.html 应如何安放 1. $1 1. 使用 CICD 构造你的前端质量保障体系 1.
style
发布于更新于在打包器,比如 webpack 中,需要借用 loader 将非 JS 资源转化成可识别为 Javascript 的 module。 在 webpack 中,处理 css 稍微比较费劲,需要借用两个 loader 来做成这件事情: 1. $1: 处理 CSS 中的 url 与 @import ,并将其作为模块引入 1. $1: 将样式注入
Tree Shaking
发布于更新于class 是否可以 Tree Shaking + CONCATENATED MODULE Tree Shaking 指基于 ES Module 进行静态分析,通过 AST 将用不到的函数进行移除,从而减小打包体积。 有例为证: > 以下示例可在 $1 中进行在线演示 最终打包过程中, sub 没有被引用到,将不会对它进行打包。以下为打包
javascript 代码是如何被压缩的
发布于更新于在前端中但凡谈到打包,肯定要提及到 webpack,毕竟它现在已经是最为流行的打包工具。但 webpack 更多地是表现在 术 上,于是我决定写这篇文章,更多地讲解一些关于 道 的。 对于一个前端而言,生产环境的静态资源优化,它既是面试中的高频问题,同时也最容易成为平时工作中的 OKR/KPI。
如何提升 webpack 的构建速度
发布于更新于使用 $1 可评估每个 loader/plugin 的执行耗时。 webpack5 内置了关于缓存的插件,可通过以下配置开启。它将 Module 、 Chunk 、 ModuleChunk 等信息序列化到磁盘中,二次构建避免重复编译计算,编译速度得到很大提升。 如对一个 JS 文件配置了 eslint 、 typescript 、 bab
如何做好一份前端技术周报 | 项目复盘
发布于更新于分享前端技术周刊项目的完整复盘,从缘起、调研、开发到运营的全过程,以及如何使用 Gatsby 构建专业的技术周刊网站
如何做一个极客时间返现平台
发布于更新于分享极客时间返现平台的技术实现,选用 Gatsby 与 Vercel 部署,涵盖爬虫、React 前端与半天从爬虫到上线的经历。
Git 实用技巧:5 个提升开发效率的命令详解
发布于更新于掌握 5 个 Git 实用技巧提升开发效率:使用 git blame 和 git log 追踪代码修改历史,git checkout - 快速切换分支,git shortlog 统计项目贡献,git log 定位提交记录,git grep 高效搜索代码。实际项目中必备的 Git 进阶技能。
GraphQL 开发指南:从基础到生产环境的最佳实践
发布于更新于全面的 GraphQL 开发指南,涵盖 TypeScript 集成、N+1 查询优化、用户认证、日志监控、异常处理等生产环境必备技能,助你构建高性能 GraphQL API
利用 hash/query 键值对优化网络性能 (APQ)
发布于更新于Apollo Server 的 APQ:queryHashCache、带 sha256Hash 的 GET 请求示例,以及与缓存、Service Worker、CORS 的章节。
源码分析
发布于更新于1. 验证 Schema 的有效性 1. 解析 Source(Operation) 1. 执行 + validateSchema + validateRootTypes + validateDirectives + validateTypes + parseSource + Source + Document + execute + ro
使用 GraphQL 构建 web 应用
发布于更新于+ $1 + $1 + $1 + $1 + 状态码 + N+1 Query 问题与 Dataloader - 待续 + 按需查询数据库字段 - 待续 + 用户认证与 JWT - 待续 + 实现一个简单的 CRUD - 待续 + graphql、cacheControl 与缓存 - 待续 +