ZiuChen.github.io/note/Front-end Engineering.html

21 lines
35 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>前端工程化 | ZiuChen</title>
<meta name="description" content="Unlimited Progress.">
<link rel="preload stylesheet" href="/assets/style.6d715206.css" as="style">
<link rel="modulepreload" href="/assets/app.94d5b31a.js">
<link rel="modulepreload" href="/assets/note_Front-end Engineering.md.66f43176.lean.js">
<link rel="icon" href="/logo.png">
<script id="check-dark-light">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-23299678><!--[--><!--]--><!--[--><span tabindex="-1" data-v-4510101b></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-4510101b> Skip to content </a><!--]--><!----><header class="VPNav" data-v-23299678 data-v-55561c08><div class="VPNavBar has-sidebar" data-v-55561c08 data-v-b274701f><div class="container" data-v-b274701f><div class="title" data-v-b274701f><div class="VPNavBarTitle has-sidebar" data-v-b274701f data-v-549de4de><a class="title" href="/" data-v-549de4de><!--[--><!--]--><!--[--><img class="VPImage logo" src="/logo.png" alt data-v-079e60c3><!--]--><!--[-->ZiuChen<!--]--><!--[--><!--]--></a></div></div><div class="content" data-v-b274701f><div class="curtain" data-v-b274701f></div><div class="content-body" data-v-b274701f><!--[--><!--]--><!----><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-b274701f data-v-33721c64><span id="main-nav-aria-label" class="visually-hidden" data-v-33721c64>Main Navigation</span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/" data-v-33721c64 data-v-b293d4cd data-v-857b9044><!--[-->首页<!--]--><!----></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-33721c64 data-v-49ae13ed><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-49ae13ed><span class="text" data-v-49ae13ed><!----> 我的项目 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-49ae13ed><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-49ae13ed><div class="VPMenu" data-v-49ae13ed data-v-5ba41aea><div class="items" data-v-5ba41aea><!--[--><!--[--><div class="VPMenuLink" data-v-5ba41aea data-v-4055455f><a class="VPLink link" href="/project/ClipboardManager/" data-v-4055455f data-v-857b9044><!--[-->超级剪贴板<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-5ba41aea data-v-4055455f><a class="VPLink link" href="/project/SmartWordBreak/" data-v-4055455f data-v-857b9044><!--[-->超级分词<!--]--><!----></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-33721c64 data-v-49ae13ed><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-49ae13ed><span class="text" data-v-49ae13ed><!----> 开源作品 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-49ae13ed><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-49ae13ed><div class="VPMenu" data-v-49ae13ed data-v-5ba41aea><div class="items" data-v-5ba41aea><!--[--><!--[--><div class="VPMenuLink" data-v-5ba41aea data-v-4055455f><a class="VPLink link" href="/works/opensource.html" data-v-4055455f data-v-857b9044><!--[-->个人作品<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-5ba41aea data-v-4055455f><a class="VPLink link" href="/works/contribution.html" data-v-4055455f data-v-857b9044><!--[-->社区贡献<!--]--><!----></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-33721c64 data-v-49ae13ed><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-49ae13ed><span class="text" data-v-49ae13ed><!----> 学习笔记 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-49ae13ed><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-49ae13ed><div class="VPMenu" data-v-49ae13ed data-v-5ba41aea><div class="items" data-v-5ba41aea><!--[--><!--[--><div class="VPMenuLink" data-v-5ba41aea data-v-4055455f><a class="VPLink link" href="/note/JavaScript.html" data-v-4055455f data-v-857b9044><!--[-->JavaScript基础<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-5ba41aea data-v-4055455f><a class="VPLink link" href="/note/CSS.html" data-v-4055455f data-v-857b9044><!--[-->CSS基础<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-5ba41aea data-v-4055455f><a class="VPLink link" href="/note/JavaScriptEnhanced.html" data-v-4055455f data-v-857b9044><!--[-->JavaScript进阶<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-5ba41aea data-v-4055455f><a class="VPLink link active" href="/note/Front-end%20Engineering.html" data-v-4055455f data-v-857b9044><!--[-->前端工程化<!--]--><!----></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/article/%E4%B8%80%E6%96%87%E8%AF%BB%E6%87%82%E4%BC%AA%E7%B1%BB%E4%B8%8E%E4%BC%AA%E5%85%83%E7%B4%A0.html" data-v-33721c64 data-v-b293d4cd data-v-857b9044><!--[-->文章创作<!--]--><!----></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/self/" data-v-33721c64 data-v-b293d4cd data-v-857b9044><!--[-->个人介绍<!--]--><!----></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-b274701f data-v-368654cb><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" aria-label="toggle dark mode" aria-checked="false" data-v-368654cb data-v-b602623b data-v-d161f211><span class="check" data-v-d161f211><span class="icon" data-v-d161f211><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-b602623b><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-b602623b><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-b274701f data-v-b74b5d6b data-v-6f460e71><!--[--><a class="VPSocialLink" href="https://ziuchen.github.io/" target="_blank" rel="noopener" data-v-6f460e71 data-v-51a76c22><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a><a class="VPSocialLink" href="https://juejin.cn/user/1887205216238477" target="_blank" rel="noopener" data-v-6f460e71 data-v-51a76c22><svg width="36" height="28" viewBox="0 0 36 28" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M17.5875 6.77268L21.8232 3.40505L17.5875 0.00748237L17.5837 0L13.3555 3.39757L17.5837 6.76894L17.5875 6.77268ZM17.5863 17.3955H17.59L28.5161 8.77432L25.5526 6.39453L17.59 12.6808H17.5863L17.5825 12.6845L9.61993 6.40201L6.66016 8.78181L17.5825 17.3992L17.5863 17.3955ZM17.5828 23.2891L17.5865 23.2854L32.2133 11.7456L35.1768 14.1254L28.5238 19.3752L17.5865 28L0.284376 14.3574L0 14.1291L2.95977 11.7531L17.5828 23.2891Z" fill="#1E80FF"/></svg></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-b274701f data-v-d5f0985d data-v-49ae13ed><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-49ae13ed><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="icon" data-v-49ae13ed><circle cx="12" cy="12" r="2"></circle><circle cx="19" cy="12" r="2"></circle><circle cx="5" cy="12" r="2"></circle></svg></button><div class="menu" data-v-49ae13ed><div class="VPMenu" data-v-49ae13ed data-v-5ba41aea><!----><!--[--><!--[--><!----><div class="group" data-v-d5f0985d><div class="item appearance" data-v-d5f0985d><p class="label" data-v-d5f0985d>Appearance</p><div class="appearance-action" data-v-d5f0985d><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" aria-label="toggle dark mode" aria-checked="false" data-v-d5f0985d data-v-b602623b data-v-d161f211><span class="check" data-v-d161f211><span class="icon" data-v-d161f211><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-b602623b><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-b602623b><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></div></div></div><div class="group" data-v-d5f0985d><div class="item social-links" data-v-d5f0985d><div class="VPSocialLinks social-links-list" data-v-d5f0985d data-v-6f460e71><!--[--><a class="VPSocialLink" href="https://ziuchen.github.io/" target="_blank" rel="noopener" data-v-6f460e71 data-v-51a76c22><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a><a class="VPSocialLink" href="https://juejin.cn/user/1887205216238477" target="_blank" rel="noopener" data-v-6f460e71 data-v-51a76c22><svg width="36" height="28" viewBox="0 0 36 28" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M17.5875 6.77268L21.8232 3.40505L17.5875 0.00748237L17.5837 0L13.3555 3.39757L17.5837 6.76894L17.5875 6.77268ZM17.5863 17.3955H17.59L28.5161 8.77432L25.5526 6.39453L17.59 12.6808H17.5863L17.5825 12.6845L9.61993 6.40201L6.66016 8.78181L17.5825 17.3992L17.5863 17.3955ZM17.5828 23.2891L17.5865 23.2854L32.2133 11.7456L35.1768 14.1254L28.5238 19.3752L17.5865 28L0.284376 14.3574L0 14.1291L2.95977 11.7531L17.5828 23.2891Z" fill="#1E80FF"/></svg></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-b274701f data-v-7b6c7fd5><span class="container" data-v-7b6c7fd5><span class="top" data-v-7b6c7fd5></span><span class="middle" data-v-7b6c7fd5></span><span class="bottom" data-v-7b6c7fd5></span></span></button></div></div></div></div><!----></header><div class="VPLocalNav" data-v-23299678 data-v-9fc14245><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-9fc14245><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="menu-icon" data-v-9fc14245><path d="M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"></path><path d="M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"></path><path d="M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"></path><path d="M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"></path></svg><span class="menu-text" data-v-9fc14245>Menu</span></button><a class="top-link" href="#" data-v-9fc14245>Return to top</a></div><aside class="VPSidebar" data-v-23299678 data-v-8a8550ea><div class="curtain" data-v-8a8550ea></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-8a8550ea><span class="visually-hidden" id="sidebar-aria-label" data-v-8a8550ea> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="group" data-v-8a8550ea><section class="VPSidebarItem level-0 collapsible" data-v-8a8550ea data-v-6646d2d3><div class="item" role="button" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link" data-v-6646d2d3 data-v-857b9044><!--[--><h2 class="text" data-v-6646d2d3>我的项目</h2><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-6646d2d3><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-6646d2d3><!--[--><div class="VPSidebarItem level-1 is-link" data-v-6646d2d3 data-v-6646d2d3><div class="item" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link link" href="/project/ClipboardManager/" data-v-6646d2d3 data-v-857b9044><!--[--><p class="text" data-v-6646d2d3>超级剪贴板</p><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><!----></div></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6646d2d3 data-v-6646d2d3><div class="item" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link link" href="/project/SmartWordBreak/" data-v-6646d2d3 data-v-857b9044><!--[--><p class="text" data-v-6646d2d3>超级分词</p><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><!----></div></div><!----></div><!--]--></div></section></div><div class="group" data-v-8a8550ea><section class="VPSidebarItem level-0 collapsible" data-v-8a8550ea data-v-6646d2d3><div class="item" role="button" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link" data-v-6646d2d3 data-v-857b9044><!--[--><h2 class="text" data-v-6646d2d3>开源作品</h2><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-6646d2d3><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-6646d2d3><!--[--><div class="VPSidebarItem level-1 is-link" data-v-6646d2d3 data-v-6646d2d3><div class="item" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link link" href="/works/opensource.html" data-v-6646d2d3 data-v-857b9044><!--[--><p class="text" data-v-6646d2d3>个人作品</p><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><!----></div></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6646d2d3 data-v-6646d2d3><div class="item" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link link" href="/works/contribution.html" data-v-6646d2d3 data-v-857b9044><!--[--><p class="text" data-v-6646d2d3>社区贡献</p><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><!----></div></div><!----></div><!--]--></div></section></div><div class="group" data-v-8a8550ea><section class="VPSidebarItem level-0 collapsible" data-v-8a8550ea data-v-6646d2d3><div class="item" role="button" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link" data-v-6646d2d3 data-v-857b9044><!--[--><h2 class="text" data-v-6646d2d3>文章创作</h2><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-6646d2d3><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-6646d2d3><!--[--><div class="VPSidebarItem level-1 is-link" data-v-6646d2d3 data-v-6646d2d3><div class="item" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link link" href="/article/%E3%80%902023%E3%80%91%E9%9D%92%E8%AE%AD%E8%90%A5%20-%20%E5%89%8D%E7%AB%AF%E7%BB%83%E4%B9%A0%E9%A2%98%E6%B1%87%E6%80%BB%E8%A7%A3%E6%9E%90.html" data-v-6646d2d3 data-v-857b9044><!--[--><p class="text" data-v-6646d2d3>【2023】青训营 - 前端练习题汇总解析</p><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><!----></div></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6646d2d3 data-v-6646d2d3><div class="item" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link link" href="/article/%E4%B8%80%E6%96%87%E8%AF%BB%E6%87%82%E4%BA%8B%E4%BB%B6%E5%86%92%E6%B3%A1%E4%B8%8E%E4%BA%8B%E4%BB%B6%E6%8D%95%E8%8E%B7.html" data-v-6646d2d3 data-v-857b9044><!--[--><p class="text" data-v-6646d2d3>一文读懂事件冒泡与事件捕获</p><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><!----></div></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6646d2d3 data-v-6646d2d3><div class="item" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link link" href="/article/%E4%B8%80%E6%96%87%E8%AF%BB%E6%87%82%E4%BC%AA%E7%B1%BB%E4%B8%8E%E4%BC%AA%E5%85%83%E7%B4%A0.html" data-v-6646d2d3 data-v-857b9044><!--[--><p class="text" data-v-6646d2d3>一文读懂伪类与伪元素</p><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><!----></div></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6646d2d3 data-v-6646d2d3><div class="item" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link link" href="/article/%E4%B8%80%E6%96%87%E8%AF%BB%E6%87%82%E5%87%BD%E6%95%B0%E4%B8%ADthis%E6%8C%87%E5%90%91%E9%97%AE%E9%A2%98.html" data-v-6646d2d3 data-v-857b9044><!--[--><p class="text" data-v-6646d2d3>一文读懂函数中this指向问题</p><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><!----></div></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6646d2d3 data-v-6646d2d3><div class="item" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link link" href="/article/%E4%BB%8E0%E5%AE%9E%E7%8E%B0%E4%B8%80%E4%B8%AA%E5%B9%B4%E5%BA%A6%E6%8A%A5%E5%91%8A.html" data-v-6646d2d3 data-v-857b9044><!--[--><p class="text" data-v-6646d2d3>从0实现一个年度报告</p><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><!----></div></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6646d2d3 data-v-6646d2d3><div class="item" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link link" href="/article/%E5%BD%BB%E5%BA%95%E6%90%9E%E6%87%82%E5%AF%B9%E8%B1%A1%E7%9A%84%E6%95%B0%E6%8D%AE%E5%B1%9E%E6%80%A7%E6%8F%8F%E8%BF%B0%E7%AC%A6%E3%80%81%E5%AD%98%E5%82%A8%E5%B1%9E%E6%80%A7%E6%8F%8F%E8%BF%B0%E7%AC%A6.html" data-v-6646d2d3 data-v-857b9044><!--[--><p class="text" data-v-6646d2d3>彻底搞懂对象的数据属性描述符、存储属性描述符</p><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><!----></div></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6646d2d3 data-v-6646d2d3><div class="item" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link link" href="/article/%E6%B7%B1%E5%85%A5Vue3%E6%BA%90%E7%A0%81%EF%BC%8C%E7%9C%8B%E7%9C%8BVue.use%E5%90%8E%E7%A9%B6%E7%AB%9F%E5%8F%91%E7%94%9F%E4%BA%86%E4%BB%80%E4%B9%88%EF%BC%9F.html" data-v-6646d2d3 data-v-857b9044><!--[--><p class="text" data-v-6646d2d3>深入Vue3源码看看Vue.use后究竟发生了什么</p><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><!----></div></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6646d2d3 data-v-6646d2d3><div class="item" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link link" href="/article/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3Proxy%E4%B8%8EReflect.html" data-v-6646d2d3 data-v-857b9044><!--[--><p class="text" data-v-6646d2d3>深入理解Proxy与Reflect</p><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><!----></div></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6646d2d3 data-v-6646d2d3><div class="item" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link link" href="/article/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E6%B5%8F%E8%A7%88%E5%99%A8%E7%BC%93%E5%AD%98%E6%9C%BA%E5%88%B6.html" data-v-6646d2d3 data-v-857b9044><!--[--><p class="text" data-v-6646d2d3>深入理解浏览器缓存机制</p><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><!----></div></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6646d2d3 data-v-6646d2d3><div class="item" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link link" href="/article/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E6%B5%8F%E8%A7%88%E5%99%A8%E8%BF%90%E8%A1%8C%E5%8E%9F%E7%90%86.html" data-v-6646d2d3 data-v-857b9044><!--[--><p class="text" data-v-6646d2d3>深入理解浏览器运行原理</p><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><!----></div></div><!----></div><!--]--></div></section></div><div class="group" data-v-8a8550ea><section class="VPSidebarItem level-0 collapsible has-active" data-v-8a8550ea data-v-6646d2d3><div class="item" role="button" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link" data-v-6646d2d3 data-v-857b9044><!--[--><h2 class="text" data-v-6646d2d3>学习笔记</h2><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-6646d2d3><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-6646d2d3><!--[--><div class="VPSidebarItem level-1 is-link" data-v-6646d2d3 data-v-6646d2d3><div class="item" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link link" href="/note/JavaScript.html" data-v-6646d2d3 data-v-857b9044><!--[--><p class="text" data-v-6646d2d3>JavaScript基础</p><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><!----></div></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6646d2d3 data-v-6646d2d3><div class="item" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link link" href="/note/CSS.html" data-v-6646d2d3 data-v-857b9044><!--[--><p class="text" data-v-6646d2d3>CSS基础</p><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><!----></div></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-6646d2d3 data-v-6646d2d3><div class="item" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link link" href="/note/JavaScriptEnhanced.html" data-v-6646d2d3 data-v-857b9044><!--[--><p class="text" data-v-6646d2d3>JavaScript进阶</p><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><!----></div></div><!----></div><div class="VPSidebarItem level-1 is-link is-active has-active" data-v-6646d2d3 data-v-6646d2d3><div class="item" data-v-6646d2d3><div class="indicator" data-v-6646d2d3></div><a class="VPLink link link" href="/note/Front-end%20Engineering.html" data-v-6646d2d3 data-v-857b9044><!--[--><p class="text" data-v-6646d2d3>前端工程化</p><!--]--><!----></a><div class="caret" role="button" data-v-6646d2d3><!----></div></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-23299678 data-v-f76a1d95><div class="VPDoc has-sidebar has-aside" data-v-f76a1d95 data-v-e32ad3fb><div class="container" data-v-e32ad3fb><div class="aside" data-v-e32ad3fb><div class="aside-curtain" data-v-e32ad3fb></div><div class="aside-container" data-v-e32ad3fb><div class="aside-content" data-v-e32ad3fb><div class="VPDocAside" data-v-e32ad3fb data-v-1b364ca7><!--[--><!--]--><!--[--><!--]--><div class="VPDocAsideOutline" data-v-1b364ca7 data-v-ac019323><div class="content" data-v-ac019323><div class="outline-marker" data-v-ac019323></div><div class="outline-title" data-v-ac019323>On this page</div><nav aria-labelledby="doc-outline-aria-label" data-v-ac019323><span class="visually-hidden" id="doc-outline-aria-label" data-v-ac019323> Table of Contents for current page </span><ul class="root" data-v-ac019323 data-v-e23b97f7><!--[--><!--]--></ul></nav></div></div><!--[--><!--]--><div class="spacer" data-v-1b364ca7></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-e32ad3fb><div class="content-container" data-v-e32ad3fb><!--[--><!--]--><main class="main" data-v-e32ad3fb><div style="position:relative;" class="vp-doc _note_Front-end%20Engineering" data-v-e32ad3fb><div><h1 id="前端工程化" tabindex="-1">前端工程化 <a class="header-anchor" href="#前端工程化" aria-hidden="true">#</a></h1><h2 id="node-js" tabindex="-1">Node.js <a class="header-anchor" href="#node-js" aria-hidden="true">#</a></h2><ul><li>什么是Node.JS Node的应用场景</li><li>JS代码执行</li><li>Node的输入和输出</li><li>Node的全局对象</li></ul><h3 id="什么是node-js" tabindex="-1">什么是Node.js <a class="header-anchor" href="#什么是node-js" aria-hidden="true">#</a></h3><p>Node.js是一个基于<strong>V8 JavaScript引擎</strong><strong>JavaScript运行时环境</strong></p><ul><li>V8可以嵌入到任何C++应用程序中无论是Chrome还是Node.js事实上都嵌入了V8引擎来执行JavaScript代码</li><li>在Chrome浏览器中还需要解析、渲染HTML、CSS等相关渲染引擎另外还需要支持浏览器操作的API、浏览器自己的事件循环</li><li>在Node.js中我们也需要进行一些额外操作文件系统读写、网络IO、加密、压缩解压文件等</li></ul><p>可以简单总结出Node.js和浏览器的区别</p><ul><li><p>Chrome浏览器</p><ul><li><p>Blink负责解析HTML文档遇到JavaScript标签时将内容交给V8引擎</p></li><li><blockquote><p>Blink 是 Google Chrome 浏览器的渲染引擎V8 是 Blink 内置的 JavaScript 引擎</p></blockquote><ul><li>预分析检查语法错误但不生成AST树</li><li>生成AST语法分析、词法分析后生成抽象语法树AST <ul><li>AST 为每一行代码定义键值对。初始类型标识符定义 AST 属于一个程序,然后所有代码行将定义在主体内部,主体是一个对象数组。</li></ul></li><li>生成字节码基线编译器Ignition将 AST 转换为字节码</li><li>生成机器代码:优化编译器 (Turbofan) 将字节码转换为优化的机器代码。另外,在逐行执行字节码的过程中,<strong>如果一段代码经常被执行V8会直接将这段代码转换并保存为机器码</strong>,下次执行不需要经过字节码,优化了执行速度</li></ul></li></ul></li><li><p>Node.js</p><ul><li>只处理JavaScript代码 内部V8引擎负责JS代码的执行</li><li>JavaScript代码 -&gt; V8 -&gt; Node.js Bindings -&gt; LibUV</li><li>LibUV是使用<strong>C语言编写的库</strong>,提供了<strong>事件循环、文件系统读写、网络IO、线程池</strong>等等内容</li></ul></li></ul><p>![The Node.js System](Front-end Engineering.assets/The Node.js System.jpeg)</p><h3 id="node-js的应用场景" tabindex="-1">Node.js的应用场景 <a class="header-anchor" href="#node-js的应用场景" aria-hidden="true">#</a></h3><ul><li>前端开发的库都是以node包形式管理的</li><li>npm yarn pnpm成为前端开发使用最多的工具</li><li>使用Node.js作为Web服务器开发、中间件、代理服务器</li><li>借助Node.js完成前后端渲染的同构应用</li><li>编写脚本工具 构建项目 打包代码等</li><li>Electron桌面应用程序</li></ul></div></div></main><!--[--><!--]--><footer class="VPDocFooter" data-v-e32ad3fb data-v-26128c3c><div class="edit-info" data-v-26128c3c><div class="edit-link" data-v-26128c3c><a class="VPLink link edit-link-button" href="https://github.com/ZiuChen/ZiuChen.github.io/edit/main/docs/note/Front-end Engineering.md" target="_blank" rel="noreferrer" data-v-26128c3c data-v-857b9044><!--[--><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" class="edit-link-icon" data-v-26128c3c><path d="M18,23H4c-1.7,0-3-1.3-3-3V6c0-1.7,1.3-3,3-3h7c0.6,0,1,0.4,1,1s-0.4,1-1,1H4C3.4,5,3,5.4,3,6v14c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1v-7c0-0.6,0.4-1,1-1s1,0.4,1,1v7C21,21.7,19.7,23,18,23z"></path><path d="M8,17c-0.3,0-0.5-0.1-0.7-0.3C7,16.5,6.9,16.1,7,15.8l1-4c0-0.2,0.1-0.3,0.3-0.5l9.5-9.5c1.2-1.2,3.2-1.2,4.4,0c1.2,1.2,1.2,3.2,0,4.4l-9.5,9.5c-0.1,0.1-0.3,0.2-0.5,0.3l-4,1C8.2,17,8.1,17,8,17zM9.9,12.5l-0.5,2.1l2.1-0.5l9.3-9.3c0.4-0.4,0.4-1.1,0-1.6c-0.4-0.4-1.2-0.4-1.6,0l0,0L9.9,12.5z M18.5,2.5L18.5,2.5L18.5,2.5z"></path></svg> Edit this page on GitHub<!--]--><!----></a></div><div class="last-updated" data-v-26128c3c><p class="VPLastUpdated" data-v-26128c3c data-v-a6a422eb>Updated Date: <time datetime="2023-02-07T15:31:06.000Z" data-v-a6a422eb></time></p></div></div><div class="prev-next" data-v-26128c3c><div class="pager" data-v-26128c3c><a class="pager-link prev" href="/note/JavaScriptEnhanced.html" data-v-26128c3c><span class="desc" data-v-26128c3c>Previous page</span><span class="title" data-v-26128c3c>JavaScript进阶</span></a></div><div class="has-prev pager" data-v-26128c3c><!----></div></div></footer><!--[--><!--]--></div></div></div></div></div><footer class="VPFooter has-sidebar" data-v-23299678 data-v-bfc7af0b><div class="container" data-v-bfc7af0b><p class="message" data-v-bfc7af0b>Released under the MIT License.</p><p class="copyright" data-v-bfc7af0b>Copyright © 2019-present Ziu Chen</p></div></footer><!--[--><!--]--></div></div>
<script>__VP_HASH_MAP__ = JSON.parse("{\"article_一文读懂事件冒泡与事件捕获.md\":\"8ffefd80\",\"article_一文读懂函数中this指向问题.md\":\"f6508f72\",\"article_一文读懂伪类与伪元素.md\":\"dfb8b26d\",\"article_【2023】青训营 - 前端练习题汇总解析.md\":\"d551ee63\",\"article_深入理解浏览器运行原理.md\":\"dac12750\",\"index.md\":\"c3e50456\",\"article_彻底搞懂对象的数据属性描述符、存储属性描述符.md\":\"9cda00db\",\"article_深入vue3源码看看vue.use后究竟发生了什么.md\":\"e5df2d33\",\"article_从0实现一个年度报告.md\":\"b23f5ee8\",\"article_深入理解浏览器缓存机制.md\":\"8bbc1a24\",\"article_深入理解proxy与reflect.md\":\"e5d90d5d\",\"note_javascript.md\":\"7d82dc69\",\"note_front-end engineering.md\":\"66f43176\",\"note_css.md\":\"504f05e4\",\"project_clipboardmanager_index.md\":\"8e0a31fd\",\"project_clipboardmanager_log_index.md\":\"bc5fefe2\",\"project_clipboardmanager_statement_index.md\":\"98bc3e66\",\"project_clipboardmanager_vip_index.md\":\"c8460180\",\"project_smartwordbreak_index.md\":\"8e06fb08\",\"project_smartwordbreak_log_index.md\":\"c4990e36\",\"project_smartwordbreak_statement_index.md\":\"4e170fb2\",\"self_index.md\":\"d9f8db79\",\"works_contribution.md\":\"48ce0aab\",\"works_opensource.md\":\"273cfbe0\",\"project_clipboardmanager_guide_index.md\":\"a1b2b7e7\",\"note_javascriptenhanced.md\":\"e445eea3\"}")</script>
<script type="module" async src="/assets/app.94d5b31a.js"></script>
</body>
</html>