
前端开发是创建WEB页面或APP等前端界面呈现给用户的过程,通过HTML,CSS及JavaScript以及衍生出来的各种技术、框架、解决方案,来实现互联网产品的用户界面交互。
前端作为程序员的最低门槛,近些年随着人数突增,难度也大大提升,那么作为前端开发,提升个人技术,增加个人对这个行业的竞争力就格外重要,从入门基础到框架,再到更高级的技术,掌握就可以成为除了年纪而无法替代的程序猿。
话不多说,展示一波内容,都是个人整理,需要可以【点击此处】,记得备注一下哦
1.[Webpack] 配置代码太多,达到数千⾏,这个时候该如何优化配置代码【热度: 186】
当 Webpack 配置代码变得冗⻓和难以管理时,可以采取以下⽅法来优化配置:
将配置⽂件分成多个部分,每个⽂件只负责⼀部分逻辑。⽐如基础配置、开发环境配置、⽣产环境配置等。
通过环境变量来区分不同的配置环境,使⽤ webpack-merge 或 env-cmd 这样的库来合并配置。
将常⽤的 loader、plugins、entry 等配置项封装成函数或者模块,然后在主配置⽂件中引⼊。
检查配置中的重复部分,将它们抽象成共⽤的配置, 再使⽤ webpack-merge 来合并多个配置⽂件,保持配置的清晰和可维护性。
如果项⽬中使⽤了⼤量插件和加载器,请考虑将它们的实例化和配置逻辑封装在单独的函数或⽂件中。 然后根据不同的环境, 直接 pick 不同的配置即可。 可以达到配置的 loader 和 plugin 集中管理。
跳过 eslint 和 commitlint 的钩⼦,使⽤ --no-verify (对于 git commit 来说是 -n ),的确是⼀个容许开发者在紧急情况下超越钩⼦检查的⼿段。然⽽,这也削弱了代码质量保证的制度。以下是⼀些⽅法,可以⽤来加强这些卡点的靠谱办法:
• CI/CD 流⽔线中增加检查:在你的 CI/CD 流程中增加 eslint 和 commitlint 的检查步骤。如果检查失败,则阻⽌代码合并或部署。
• 强制挂钩:虽然开发者可能在本地禁⽤钩⼦,但你不能控制别⼈的本地环境。相反,你可以编写服务器端的钩⼦,⽐如在 Git 仓库的服务器上使⽤ pre-receive 钩⼦,来拒绝不符合规范的提交。
• 定期⾃动化检查:定期运⾏⼀个⾃动化的脚本或 GitHub Action,检查代码库的 eslint 与commitlint 违规情况,并⾃动创建⼀个修复问题的 issue 或拉取请求。你可以最⼤限度地减少绕过 eslint 和 commitlint 检查的情况。然⽽,值得记住的是,在极少数情况下,可能存在合法的理由需要紧急提交代码。因此,为了灵活性和效率,完全禁⽌ --noverify 可能不是⼀个最佳的选择。好的实践中应该找到安全和灵活性之间的平衡,核⼼在于建⽴⼀个质量意识,制定明智的操作规范。
Commit lint 是⼀种实践,⽤于在代码库中规范化提交信息的格式。这种做法通常有助于团队成员理解代码库的历史记录,以及⾃动化⽣成变更⽇志。下⾯是实施 Commit lint 的⼀些基本步骤:
1.选择 Commit 信息规范: ⾸先,你需要选择⼀个提交信息的规范,最常⻅的是ConventionalCommits,它具有明确的结构和规则。
2.配置 Linter ⼯具:commitlint是⼀个流⾏的⼯具,⽤于检查提交信息是否符合规定的格式。安装commitlint,通常是作为项⽬的开发依赖。
1.安装钩⼦(Hook)管理⼯具:Husky是⼀个钩⼦管理⼯具,它可以助你轻松的在 Git 挂钩中添加脚本(例如,在 commit 之前检查提交信息格式)。
2.提交代码: 当你提交代码时,Husky 会触发 commit-msg 钩⼦调⽤ commitlint 检查提交信息。如果信息不符合规范,提交将被拒绝,并显⽰错误信息。
3.配置 CI/CD 流⽔线: 为了确保规范被强制执⾏,可以在 CI/CD 流⽔线中添加⼀步来执⾏commitlint。这样,如果提交的信息不符合规范,构建将会失败。
在编写 npm 包时,可以使⽤⾃动化⼯具来⽣成 changelog 和⾃动更新 tag。以下是你可以使⽤的⼀些流⾏的⼯具以及它们的基本⽤法。
在这两种情况下,都推荐使⽤遵循某种规范的 commit 消息,如 Conventional Commits 规范,这样可以让⼯具更准确地解析 commit 消息来进⾏版本管理。此外,确保你的 CI/CD 系统有⾜够的权限来推送 tags 到远程仓库。
在库项⽬的根⽬录下创建或编辑 tsconfig.json ⽂件,确保编译器配置选项如下:
1.这告诉使⽤你库的 TypeScript ⽤⼾,在哪⾥可以找到类型声明⽂件。
前端代码的测试覆盖率通常是指衡量在测试过程中有多少代码被执⾏了的⼀个指标。测试覆盖率有助于了解测试的全⾯性,以下是测试前端代码覆盖率常⽤的⼿段:
◦ 利⽤测试框架或插件⽣成覆盖率报告(例如 Istanbul/nyc ⼯具可以与这些框架集成以⽣成覆盖率数据)。
在 Webpack 中提取源码⾥被多个⼊⼝点复⽤的代码,例如⼀个 utils ⽂件,可以通过配置optimization.splitChunks 来实现。Webpack 会将这些频繁复⽤的模块提取出来,打包到⼀个独⽴的 chunk 中,使得浏览器可以单独缓存这部分代码,并在多个⻚⾯间共享使⽤,优化加载性能。
•cacheGroups 是⼀个对象,⽤于定义缓存组,可以继承和/或覆盖 splitChunks 的任何选项。每个缓存组可以有⾃⼰的配置,将不同的模块提取到不同的⽂件中。
•minChunks: 2 表⽰模块⾄少被两个⼊⼝点引⽤时,才会被提取。•minSize: 0 指定模块的最⼩体积是 0,即任意⼤⼩的模块都被提取。
这会让任何从 node_modules ⽬录导⼊,并在⾄少两个⼊⼝点中使⽤的模块,都会被打包到⼀个名为 commons.js 的⽂件中(当然,实际的⽂件名会受到 output 配置的影响,例如是否包含哈希值等)。
正确配置这些参数后, utils 这样的模块就会被⾃动提取并共享,⽽不是在每个⼊⼝点的 bundle 中重复包含。这样做的好处是,任何更新业务逻辑的时候,只要 utils 没有发⽣变化,⽤⼾浏览器上已缓存的 commons.js ⽂件就不需要重新下载。
1.filename: filename 属性⽤于指定输出的 bundle 的名称。当你的应⽤只有⼀个⼊⼝点时,可以直接使⽤⼀个固定名称。如果有多个⼊⼝点,那么你可以使⽤占位符来确保每个⽂件具有唯⼀的名称,如使⽤ [name] 来对应每个⼊⼝点的名称。 filename 主要与⼊⼝点相关联的那些⽂件有关。
使⽤这两个属性使得 Webpack 能够区分出⼊⼝⽂件和其他类型的⽂件,从⽽允许开发者更好地控制输出资源的命名和缓存。
要使⽤Typescript来编写 webpack 配置,你需要先安装必要的依赖,⽐如 Typescript 以及其相应的类型声明,类型声明可以从DefinitelyTyped项⽬中获取,依赖安装如下所⽰:
2. CMD 是更加懒惰,是依赖就近,延迟执⾏。也就是说,在模块中需要⽤到依赖时,才去引⼊依赖。这和 Webpack 的理念以及模块收集和打包机制不兼容
CMD(Common Module Definition)是⼀种深受国内前端开发者喜爱的模块定义规范,主要被⽤在了 Sea.js 这个模块加载器中。CMD 是国内开发者提出的规范,它和 AMD 很相似,但是更符合国内开发者的习惯,需要时可以延迟执⾏。
⾯对 CMD,Webpack 的社区并没有⼴泛地采⽤或者需要⽀持这种模块定义。CMD 在模块定义时依赖于具体的 API 和加载时机,这和 Webpack 的理念以及模块收集和打包机制不完全兼容。Webpack ⿎励在编译时就确定模块依赖,⽽ CMD 更倾向于运⾏时动态确定。
尽管如此,理论上是可以通过⼀些插件或 loader 来实现对 CMD 模块的⽀持的,但是官⽅并没有集成这样的功能,因为需求没有那么⼤,同时现有的模块加载机制已经可以满⾜绝⼤多数场景的需要。随着前端⼯程化的深⼊,标准化的模块定义(如 ES Modules)更加受到⻘睐,⽽特定的模块定义(如CMD)则逐渐被边缘化。因此,Webpack 没有默认⽀持 CMD,也反映了当前前端模块化开发的趋势和实践。
前端视⻆来做稳定性, 本是⼀个开放性话题,这⾥没有统⼀的解法, 作者在此提供⼏个思路和反向:
◦ rules: 配置模块的读取和解析规则,通常⽤来配置 loader。
◦ extensions: ⾃动解析确定的扩展,此选项能够使⽤⼾在引⼊模块时不带扩展。
5. plugins: 插件是⽤来扩展 webpack 功能的。它们会在构建流程中的特定时机注⼊运⾏逻辑来改变构建结果或做你想要的事情。
◦ splitChunks: 配置模块的拆分,可以将公共的依赖模块提取到已有的⼊⼝ chunk 中,或者提取到⼀个新⽣成的 chunk。
每个项⽬的具体需求不同,Webpack 的配置也会有所不同。这些选项提供了强⼤的配置能⼒和灵活性,可以⽤来定制 Webpack 的打包、加载和转换⾏为。
Webpack 的 optimize 选项是在指定 Webpack 配置对象时,⽤于配置优化选项的⼀个属性。该属性下包含了⼀系列⽤于调整构建输出质量和性能的设置。这⾥是⼀些 optimize 属性中可能包含的选项:
• splitChunks:这⽤于代码分割,可以将公共的依赖模块提取到已有的⼊⼝ chunk 中,或者产⽣⼀个新的 chunk。这可以被⽤来得到更⼩的 bundle 体积,优化加载时间,或者更好的缓存利⽤。
• runtimeChunk:该选项将 Webpack 的运⾏时代码分割成⼀个单独的 chunk。使⽤这个设置有利于⻓期缓存,并且当你使⽤多个⼊⼝点时推荐使⽤。
• minimizer:当你想要覆盖默认的压缩⼯具或者提供额外的压缩⼯具时使⽤。
在 Webpack 4 及以上版本中,这些优化默认在 mode 被设置为 production 时⽣效。通过合理地配置这些选项,开发者可以显著提⾼应⽤程序的加载和运⾏性能。这些优化通常包括减少 bundle 的体积和提⾼代码的运⾏时效率。在开发模式下,很多优化默认是关闭的,以提供更快的构建速度和更好的调试体验。
在计算机科学中,JIT 是“Just-In-Time”(即时编译)的缩写,它是⼀种提⾼代码执⾏性能的技术。
1. 解释执⾏:V8 ⾸先通过⼀个解释器(如 Ignition)来执⾏ JavaScript 代码。这个过程中,代码不会编译成机器语⾔,⽽是逐⾏解释执⾏。这样做的优点是启动快,但执⾏速度较慢。2. 即时编译:当代码被多次执⾏时,V8 会认为这部分代码是“热点代码”(Hot Spot),此时 JIT 编译器(如 TurboFan)会介⼊,将这部分热点代码编译成机器语⾔。机器语⾔运⾏在 CPU 上⽐解释执⾏要快得多。
3. 优化与去优化:JIT 编译器会对热点代码进⾏优化,但有时候它会基于错误的假设做出优化(例如认为某个变量总是某种类型)。如果后来的执⾏发现这些假设不成⽴,编译器需要去掉优化(Deoptimize),重新编译。
JIT 编译器的⼀个关键优点是它能够在不牺牲启动速度的情况下,提供接近于或同等于编译语⾔的运⾏速度。这使得像 JavaScript 这样原本被认为执⾏效率较低的语⾔能够⽤于复杂的计算任务和⾼性能的应⽤场景。
随着 V8 和其他现代 JavaScript 引擎的不断进步,JIT 编译技术也在持续优化,以提供更快的执⾏速度和更⾼的性能。
目前来说前端工程化还是一种对标高级的技术,掌握之后涨薪加位,但也要各位能掌握一定的技术再去了解,不然总不能还不会走就想跑吧!
界面新闻记者 张蕊界面新闻编辑 任雪松三月成都,第114届全国糖酒会的酒店展区透着不同于以往的“冷静”。茅台、五粮液、泸州老窖、舍得、洋河等头部酒企集体缺席酒店展,转而各自回大本营举办消费者活动——泸州老窖将“窖主节”带回泸州,舍得在射洪举办老酒节。
有房出租的朋友要注意了,今天讲述的是一种专门针对房东的新骗局。家住成都的罗女士刚在网上把出租店铺的信息发出,就有人联系,而且仅凭着几句网上交流,就爽快地支付了2000元订金。可谁知,这“好租客”差点骗走房东罗女士价值60万元的黄金。
特朗普封锁霍尔木兹!想掐断伊朗和中国的生命线号,特朗普又在社交平台上“放狠话”了,一句话直接搅乱了全球市场:美国海军要封锁霍尔木兹海峡,凡是进出伊朗港口的船,一律拦下来!
4月14日报道成都一凶宅16.6万起拍,3小时竞价至90.6万,98人报名,32次出价,9万多次围观,建筑面积89.70平方米,精装修,且临近地铁#大象主播说 @司凯
云南西双版纳到广东江南市场一车西瓜全程1700公里,走昆磨高速27公里长下坡,限时30个小时#卡车司机 #货车司机 #货车司机的心酸 #运满满司机
霍尔木兹海峡一夜“归零”,美国这步棋不是封锁伊朗,是在重塑全球能源秩序
油轮掉头,航线中断,市场迅速反应。有人在封锁,有人在旁观,还有人已经开始重新布局。4月13日,来自英国方面的消息显示,在美国总统特朗普通过社交媒体宣布将对霍尔木兹海峡实施封锁之后,这条全球最重要的能源通道之一,几乎陷入停摆状态。
谁能想到81岁bibo必博官网杜特尔特身陷羁押,一生“英勇”,如今却只能靠小儿子撑场面。4月11日,塞巴斯蒂安正式接任菲律宾民主人民力量党总裁,平稳接下家族大旗,给狱中的父亲挣足了脸面。可没人知道,这个低调的小儿子,凭什么能稳住杜特尔特的根基?他的上任,又藏着菲律宾政坛多少不为人知的变数。
阅读须知:本文内容所有信息和数据,均为作者查阅官方信息和网络已知数据整合解析,旨在让读者更清晰了解相应信息,如有数据错误或观点有误,请文明评论,作者积极改正!
文 地缘历史档案编辑 地缘历史档案声明:拙见在此,抛砖引玉。诚邀您点个「关注」,方便日后交流。文中观点仅为一家之言,我尤其期待听到您的不同见解甚至反对意见。真理越辩越明,感谢您赐教!谁都料不到,日本下一步的举动有多疯狂!
美国一家权威智库用26次兵棋推演,把可能的结果摆在全世界眼前:日本一旦卷进去,代价会大到让人难以承受。