[{"data":1,"prerenderedAt":957},["ShallowReactive",2],{"doc-\u002Fdocs\u002Fbabel-basics":3,"docs-all":779},{"id":4,"title":5,"body":6,"category":762,"date":763,"description":764,"draft":765,"extension":766,"meta":767,"navigation":768,"path":769,"seo":770,"source":771,"stem":772,"tags":773,"__hash__":778},"docs\u002Fdocs\u002Fbabel-basics.md","Babel 转译基础与构建集成",{"type":7,"value":8,"toc":754},"minimark",[9,14,18,23,26,95,106,110,113,203,220,244,248,254,314,321,328,492,495,499,506,544,547,550,578,585,588,599,691,707,710,750],[10,11,13],"h1",{"id":12},"babel-转译基础","Babel 转译基础",[15,16,17],"p",{},"课程使用 Babel 7（原依赖约 7.10）。这里记录命令和配置片段，不附带 Node 工程。片段按 Babel 7 解释，不自动套用到其他大版本。",[19,20,22],"h2",{"id":21},"babel-做什么","Babel 做什么",[15,24,25],{},"Babel 按配置把 JavaScript 语法转换为目标环境可理解的形式。它与打包器职责不同：转译处理语法，打包组织模块依赖与输出资源。",[27,28,29,42],"table",{},[30,31,32],"thead",{},[33,34,35,39],"tr",{},[36,37,38],"th",{},"包",[36,40,41],{},"作用",[43,44,45,57,67,77,87],"tbody",{},[33,46,47,54],{},[48,49,50],"td",{},[51,52,53],"code",{},"@babel\u002Fcore",[48,55,56],{},"转译核心",[33,58,59,64],{},[48,60,61],{},[51,62,63],{},"@babel\u002Fcli",[48,65,66],{},"命令行入口",[33,68,69,74],{},[48,70,71],{},[51,72,73],{},"@babel\u002Fpreset-env",[48,75,76],{},"按目标环境选择语法转换等配置",[33,78,79,84],{},[48,80,81],{},[51,82,83],{},"@babel\u002Fpreset-react",[48,85,86],{},"JSX 等 React 相关语法转换",[33,88,89,92],{},[48,90,91],{},"单独 plugin",[48,93,94],{},"处理某种具体语法或转换任务",[15,96,97,98,105],{},"仅转换语法不一定补齐运行时 API，例如目标环境缺少 Promise 时，还需要相应 polyfill。targets 和 polyfill 应按目标环境确定。",[99,100,104],"a",{"href":101,"rel":102},"https:\u002F\u002Fbabeljs.io\u002Fdocs\u002Fusage",[103],"nofollow","Babel 使用指南","。",[19,107,109],{"id":108},"安装与-cli","安装与 CLI",[15,111,112],{},"以下是已有独立练习目录中的命令示例，不需要放进博客项目执行：",[114,115,120],"pre",{"className":116,"code":117,"language":118,"meta":119,"style":119},"language-sh shiki shiki-themes github-light github-dark","npm init -y\nnpm install --save-dev @babel\u002Fcore@7 @babel\u002Fcli@7 @babel\u002Fpreset-env@7\nnpx babel es6\u002F01_useBabel.js\nnpx babel es6\u002F01_useBabel.js --out-file dist\u002Fbuild.js\nnpx babel es6 --out-dir dist\n","sh","",[51,121,122,139,159,171,187],{"__ignoreMap":119},[123,124,127,131,135],"span",{"class":125,"line":126},"line",1,[123,128,130],{"class":129},"sScJk","npm",[123,132,134],{"class":133},"sZZnC"," init",[123,136,138],{"class":137},"sj4cs"," -y\n",[123,140,142,144,147,150,153,156],{"class":125,"line":141},2,[123,143,130],{"class":129},[123,145,146],{"class":133}," install",[123,148,149],{"class":137}," --save-dev",[123,151,152],{"class":133}," @babel\u002Fcore@7",[123,154,155],{"class":133}," @babel\u002Fcli@7",[123,157,158],{"class":133}," @babel\u002Fpreset-env@7\n",[123,160,162,165,168],{"class":125,"line":161},3,[123,163,164],{"class":129},"npx",[123,166,167],{"class":133}," babel",[123,169,170],{"class":133}," es6\u002F01_useBabel.js\n",[123,172,174,176,178,181,184],{"class":125,"line":173},4,[123,175,164],{"class":129},[123,177,167],{"class":133},[123,179,180],{"class":133}," es6\u002F01_useBabel.js",[123,182,183],{"class":137}," --out-file",[123,185,186],{"class":133}," dist\u002Fbuild.js\n",[123,188,190,192,194,197,200],{"class":125,"line":189},5,[123,191,164],{"class":129},[123,193,167],{"class":133},[123,195,196],{"class":133}," es6",[123,198,199],{"class":137}," --out-dir",[123,201,202],{"class":133}," dist\n",[15,204,205,208,209,212,213,208,216,219],{},[51,206,207],{},"-o"," 是 ",[51,210,211],{},"--out-file","，",[51,214,215],{},"-d",[51,217,218],{},"--out-dir","。课程 README 中斜杠分隔的写法表示多个用法，不能把整行连在一起当命令执行。",[15,221,222,208,225,228,229,232,233,208,236,239,240,243],{},[51,223,224],{},"npm -D",[51,226,227],{},"--save-dev","，写入 ",[51,230,231],{},"devDependencies","；",[51,234,235],{},"-S",[51,237,238],{},"--save","，通常写入 ",[51,241,242],{},"dependencies","。原 Less 笔记将两者全称写反，已统一纠正。",[19,245,247],{"id":246},"配置-preset","配置 preset",[15,249,250,253],{},[51,251,252],{},".babelrc"," 片段：",[114,255,259],{"className":256,"code":257,"language":258,"meta":119,"style":119},"language-json shiki shiki-themes github-light github-dark","{\n  \"presets\": [\n    [\"@babel\u002Fpreset-env\", { \"targets\": { \"ie\": \"11\" } }]\n  ]\n}\n","json",[51,260,261,267,275,304,309],{"__ignoreMap":119},[123,262,263],{"class":125,"line":126},[123,264,266],{"class":265},"sVt8B","{\n",[123,268,269,272],{"class":125,"line":141},[123,270,271],{"class":137},"  \"presets\"",[123,273,274],{"class":265},": [\n",[123,276,277,280,283,286,289,292,295,298,301],{"class":125,"line":161},[123,278,279],{"class":265},"    [",[123,281,282],{"class":133},"\"@babel\u002Fpreset-env\"",[123,284,285],{"class":265},", { ",[123,287,288],{"class":137},"\"targets\"",[123,290,291],{"class":265},": { ",[123,293,294],{"class":137},"\"ie\"",[123,296,297],{"class":265},": ",[123,299,300],{"class":133},"\"11\"",[123,302,303],{"class":265}," } }]\n",[123,305,306],{"class":125,"line":173},[123,307,308],{"class":265},"  ]\n",[123,310,311],{"class":125,"line":189},[123,312,313],{"class":265},"}\n",[15,315,316,317,320],{},"IE 11 仅用来演示旧环境转译效果，不代表项目需要支持它。课程写的 ",[51,318,319],{},"@babel\u002Fenv"," 是 preset 名称的简写，这里统一使用完整包名。",[15,322,323,324,327],{},"源代码 ",[51,325,326],{},"es6\u002F01_useBabel.js"," 的核心示例：",[114,329,333],{"className":330,"code":331,"language":332,"meta":119,"style":119},"language-js shiki shiki-themes github-light github-dark","const sum = (a, b) => a + b;\nclass Person {\n  constructor(name) { this.name = name; }\n  say() { return `hello, my name is ${this.name}`; }\n}\nconsole.log(sum(1, 2), new Person('kevin').say()); \u002F\u002F 3 hello, my name is kevin\n","js",[51,334,335,374,385,411,438,442],{"__ignoreMap":119},[123,336,337,341,344,347,350,353,356,359,362,365,368,371],{"class":125,"line":126},[123,338,340],{"class":339},"szBVR","const",[123,342,343],{"class":129}," sum",[123,345,346],{"class":339}," =",[123,348,349],{"class":265}," (",[123,351,99],{"class":352},"s4XuR",[123,354,355],{"class":265},", ",[123,357,358],{"class":352},"b",[123,360,361],{"class":265},") ",[123,363,364],{"class":339},"=>",[123,366,367],{"class":265}," a ",[123,369,370],{"class":339},"+",[123,372,373],{"class":265}," b;\n",[123,375,376,379,382],{"class":125,"line":141},[123,377,378],{"class":339},"class",[123,380,381],{"class":129}," Person",[123,383,384],{"class":265}," {\n",[123,386,387,390,393,396,399,402,405,408],{"class":125,"line":161},[123,388,389],{"class":339},"  constructor",[123,391,392],{"class":265},"(",[123,394,395],{"class":352},"name",[123,397,398],{"class":265},") { ",[123,400,401],{"class":137},"this",[123,403,404],{"class":265},".name ",[123,406,407],{"class":339},"=",[123,409,410],{"class":265}," name; }\n",[123,412,413,416,419,422,425,427,430,432,435],{"class":125,"line":173},[123,414,415],{"class":129},"  say",[123,417,418],{"class":265},"() { ",[123,420,421],{"class":339},"return",[123,423,424],{"class":133}," `hello, my name is ${",[123,426,401],{"class":137},[123,428,429],{"class":133},".",[123,431,395],{"class":265},[123,433,434],{"class":133},"}`",[123,436,437],{"class":265},"; }\n",[123,439,440],{"class":125,"line":189},[123,441,313],{"class":265},[123,443,445,448,451,453,456,458,461,463,466,469,472,474,476,479,482,485,488],{"class":125,"line":444},6,[123,446,447],{"class":265},"console.",[123,449,450],{"class":129},"log",[123,452,392],{"class":265},[123,454,455],{"class":129},"sum",[123,457,392],{"class":265},[123,459,460],{"class":137},"1",[123,462,355],{"class":265},[123,464,465],{"class":137},"2",[123,467,468],{"class":265},"), ",[123,470,471],{"class":339},"new",[123,473,381],{"class":129},[123,475,392],{"class":265},[123,477,478],{"class":133},"'kevin'",[123,480,481],{"class":265},").",[123,483,484],{"class":129},"say",[123,486,487],{"class":265},"()); ",[123,489,491],{"class":490},"sJ8bj","\u002F\u002F 3 hello, my name is kevin\n",[15,493,494],{},"针对旧环境时，箭头函数、Class 等会转换为对应辅助代码。不要把输出简单理解成逐字替换，实际输出取决于 Babel 版本、targets 和启用的转换。",[19,496,498],{"id":497},"类字段与-jsx","类字段与 JSX",[15,500,501,502,505],{},"课程的箭头函数类字段由当时的 ",[51,503,504],{},"@babel\u002Fplugin-proposal-class-properties"," 处理，历史配置如下：",[114,507,509],{"className":256,"code":508,"language":258,"meta":119,"style":119},"{\n  \"presets\": [\"@babel\u002Fpreset-env\"],\n  \"plugins\": [\"@babel\u002Fplugin-proposal-class-properties\"]\n}\n",[51,510,511,515,527,540],{"__ignoreMap":119},[123,512,513],{"class":125,"line":126},[123,514,266],{"class":265},[123,516,517,519,522,524],{"class":125,"line":141},[123,518,271],{"class":137},[123,520,521],{"class":265},": [",[123,523,282],{"class":133},[123,525,526],{"class":265},"],\n",[123,528,529,532,534,537],{"class":125,"line":161},[123,530,531],{"class":137},"  \"plugins\"",[123,533,521],{"class":265},[123,535,536],{"class":133},"\"@babel\u002Fplugin-proposal-class-properties\"",[123,538,539],{"class":265},"]\n",[123,541,542],{"class":125,"line":173},[123,543,313],{"class":265},[15,545,546],{},"这个名称来自原 Babel 7 课程环境。类字段现已进入标准，阅读旧配置时应区分提案阶段插件和所用版本的正式转换支持，不要据此给当前博客添加旧插件。",[15,548,549],{},"React 配置的核心是再加 JSX preset：",[114,551,553],{"className":256,"code":552,"language":258,"meta":119,"style":119},"{\n  \"presets\": [\"@babel\u002Fpreset-env\", \"@babel\u002Fpreset-react\"]\n}\n",[51,554,555,559,574],{"__ignoreMap":119},[123,556,557],{"class":125,"line":126},[123,558,266],{"class":265},[123,560,561,563,565,567,569,572],{"class":125,"line":141},[123,562,271],{"class":137},[123,564,521],{"class":265},[123,566,282],{"class":133},[123,568,355],{"class":265},[123,570,571],{"class":133},"\"@babel\u002Fpreset-react\"",[123,573,539],{"class":265},[123,575,576],{"class":125,"line":161},[123,577,313],{"class":265},[15,579,580,581,584],{},"转译 JSX 不等于提供 React 运行时。原 ",[51,582,583],{},"react-env\u002Fsrc\u002Fmain.js"," 为空，因此这里只记录配置，没有可迁移的完整 React 应用。",[19,586,587],{"id":587},"与构建工具集成",[15,589,590,591,594,595,598],{},"Webpack 通过 ",[51,592,593],{},"babel-loader"," 处理匹配文件，配置片段放在 ",[51,596,597],{},"module.rules"," 中：",[114,600,602],{"className":330,"code":601,"language":332,"meta":119,"style":119},"const babelRule = {\n  test: \u002F\\.js$\u002F,\n  exclude: \u002Fnode_modules\u002F,\n  use: {\n    loader: 'babel-loader',\n    options: { presets: ['@babel\u002Fpreset-env'] }\n  }\n};\n",[51,603,604,615,639,653,658,668,679,685],{"__ignoreMap":119},[123,605,606,608,611,613],{"class":125,"line":126},[123,607,340],{"class":339},[123,609,610],{"class":137}," babelRule",[123,612,346],{"class":339},[123,614,384],{"class":265},[123,616,617,620,623,627,630,633,636],{"class":125,"line":141},[123,618,619],{"class":265},"  test:",[123,621,622],{"class":133}," \u002F",[123,624,626],{"class":625},"snhLl","\\.",[123,628,332],{"class":629},"sA_wV",[123,631,632],{"class":339},"$",[123,634,635],{"class":133},"\u002F",[123,637,638],{"class":265},",\n",[123,640,641,644,646,649,651],{"class":125,"line":161},[123,642,643],{"class":265},"  exclude:",[123,645,622],{"class":133},[123,647,648],{"class":629},"node_modules",[123,650,635],{"class":133},[123,652,638],{"class":265},[123,654,655],{"class":125,"line":173},[123,656,657],{"class":265},"  use: {\n",[123,659,660,663,666],{"class":125,"line":189},[123,661,662],{"class":265},"    loader: ",[123,664,665],{"class":133},"'babel-loader'",[123,667,638],{"class":265},[123,669,670,673,676],{"class":125,"line":444},[123,671,672],{"class":265},"    options: { presets: [",[123,674,675],{"class":133},"'@babel\u002Fpreset-env'",[123,677,678],{"class":265},"] }\n",[123,680,682],{"class":125,"line":681},7,[123,683,684],{"class":265},"  }\n",[123,686,688],{"class":125,"line":687},8,[123,689,690],{"class":265},"};\n",[15,692,693,694,697,698,702,703,105],{},"Gulp 通过 ",[51,695,696],{},"gulp-babel"," 对文件流转译；通常应先转译到旧压缩器能理解的语法，再做压缩。完整的流水线代码见 ",[99,699,701],{"href":700},"\u002Fdocs\u002Fgulp-basics","Gulp","，loader 和其他资源处理见 ",[99,704,706],{"href":705},"\u002Fdocs\u002Fwebpack-basics","Webpack",[19,708,709],{"id":709},"来源记录",[711,712,713,723,729,738,747],"ul",{},[714,715,716,719,720,722],"li",{},[51,717,718],{},"002_es6\u002Fcode\u002F.babelrc","、",[51,721,326],{},"、README 与 package 信息：安装、CLI、转译输入。",[714,724,725,728],{},[51,726,727],{},"003_es6\u002Fcode\u002Freadme.md"," Babel 复习：合并。",[714,730,731,719,734,737],{},[51,732,733],{},"006_webpack\u002Fcode\u002F01_gulp\u002F.babelrc",[51,735,736],{},"gulpfile.js","：Babel 与类字段插件。",[714,739,740,719,743,746],{},[51,741,742],{},"006_webpack\u002Fcode\u002F02_webpack\u002Fwebpack.config.js",[51,744,745],{},"007_webpack\u002Freact-env\u002Fwebpack.config.js","：loader 与 JSX preset。",[714,748,749],{},"各 package 文件仅用于确认原依赖版本，未作为完整工程迁入。",[751,752,753],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .snhLl, html code.shiki .snhLl{--shiki-default:#22863A;--shiki-default-font-weight:bold;--shiki-dark:#85E89D;--shiki-dark-font-weight:bold}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}",{"title":119,"searchDepth":161,"depth":161,"links":755},[756,757,758,759,760,761],{"id":21,"depth":141,"text":22},{"id":108,"depth":141,"text":109},{"id":246,"depth":141,"text":247},{"id":497,"depth":141,"text":498},{"id":587,"depth":141,"text":587},{"id":709,"depth":141,"text":709},"toolchain","2026-09-09","Babel 7 的 CLI、preset、plugin、目标环境以及 Gulp、Webpack 和 JSX 转译配置摘录。",false,"md",{},true,"\u002Fdocs\u002Fbabel-basics",{"title":5,"description":764},"尚学堂 ES6 课程 002_es6 至 007_webpack 的 Babel 相关笔记与配置","docs\u002Fbabel-basics",[774,775,776,777],"javascript","es6","webpack","notes","VCINQ9_PH9_ipw-43ZsdMiVLagTvxQYRBxPPwrCV6bo",[780,782,788,793,798,807,818,825,831,841,848,857,862,869,874,880,886,893,900,907,915,921,927,933,937,942,947,951],{"path":769,"title":5,"description":764,"date":763,"category":762,"tags":781},[774,775,776,777],{"path":783,"title":784,"description":785,"date":763,"category":786,"tags":787},"\u002Fdocs\u002Fes6-arrays-objects","ES6 数组与对象扩展","展开运算符、Array.from、Object.assign、属性描述符与图片预加载示例。","fundamentals",[774,775,777],{"path":789,"title":790,"description":791,"date":763,"category":786,"tags":792},"\u002Fdocs\u002Fes6-basics","ES6 基础：作用域、解构与模板字符串","从课程示例整理 let、const、暂时性死区、全局对象、数组与对象解构及模板字符串。",[774,775,777],{"path":794,"title":795,"description":796,"date":763,"category":786,"tags":797},"\u002Fdocs\u002Fjs-promise-async","Promise、Generator 与 async\u002Fawait","从回调到 Promise 链、组合方法、Generator 执行与 async 错误处理的课程示例整理。",[774,775,777],{"path":799,"title":800,"description":801,"date":802,"category":762,"tags":803},"\u002Fdocs\u002Flinux-commands-cheatsheet","Linux 常用命令与权限管理速查","cp\u002Fmv\u002Frm、目录导航、查找、压缩、网络等基础命令速查，以及 chmod\u002Fchown 的数字与符号写法、常用组合和 WSL 下的坑。","2026-05-28",[804,805,806],"linux","wsl2","cheatsheet",{"path":808,"title":809,"description":810,"date":811,"category":812,"tags":813},"\u002Fdocs\u002Ffrontend-coding-standards","前端团队编码规范","HTML \u002F CSS \u002F JavaScript 三端统一的团队编码约定，含缩进、命名、语法与禁用项，可直接作为 Code Review 依据。","2025-12-17","standards",[814,815,774,775,816,817],"html","css","best-practice","guide",{"path":819,"title":820,"description":821,"date":822,"category":762,"tags":823},"\u002Fdocs\u002Fwindows-mklink","Windows mklink 符号链接用法","mklink 各参数区别与实用场景：目录联接、符号链接与硬链接的选择。","2024-12-18",[824,806],"windows",{"path":826,"title":827,"description":828,"date":829,"category":762,"tags":830},"\u002Fdocs\u002Frandom-color-utils","JS 随机颜色生成方法","几种生成随机 RGB \u002F HEX 颜色的实现方式与各自适用场景。","2024-12-11",[774,806],{"path":832,"title":833,"description":834,"date":835,"category":836,"tags":837},"\u002Fdocs\u002Fcanvas-vs-svg","Canvas 与 SVG 绘图方案选型","对比 Canvas 与 SVG 两种绘图方案的优缺点与适用场景，给出选型判断依据。","2024-12-09","visualization",[838,839,840,816],"canvas","svg","performance",{"path":842,"title":843,"description":844,"date":845,"category":762,"tags":846},"\u002Fdocs\u002Ffree-commercial-fonts","免费可商用字体整理","整理思源黑体、思源宋体等可商用中文字体，规避字体版权风险。","2024-11-03",[847,815,777],"font",{"path":849,"title":850,"description":851,"date":845,"category":852,"tags":853},"\u002Fdocs\u002Finterview-browser-network","浏览器与网络考点","从输入 URL 到页面呈现的完整链路，涵盖渲染流程、回流重绘、HTTP 报文与状态码、跨域同源策略与常见攻击方式。","interview",[854,855,856,840,777],"browser","http","network",{"path":858,"title":859,"description":860,"date":845,"category":852,"tags":861},"\u002Fdocs\u002Finterview-css-layout","CSS 与布局考点","em 与 rem 的区别、移动端三种适配方案对比、viewport 标准设置与 REM 布局的媒体查询实现。",[815,814,816,777],{"path":863,"title":864,"description":865,"date":845,"category":852,"tags":866},"\u002Fdocs\u002Finterview-framework-tooling","框架与工程化考点","React diff 与 setState 机制、Redux 核心组成、Vue 常考清单，以及 Webpack、Vite、Git 的面试要点。",[867,774,776,868,777],"vue","vite",{"path":870,"title":871,"description":872,"date":845,"category":852,"tags":873},"\u002Fdocs\u002Finterview-javascript-core","JavaScript 核心考点","数据类型、this 绑定、闭包、原型链、异步与数组方法，前端面试中 JS 部分的高频考点与代码示例。",[774,775,777],{"path":875,"title":876,"description":877,"date":845,"category":786,"tags":878},"\u002Fdocs\u002Fjs-module-systems","JavaScript 模块化方案","梳理 CommonJS、AMD、ES Module 等模块化方案的差异与使用方式。",[774,879,775,777],"module-system",{"path":881,"title":882,"description":883,"date":845,"category":786,"tags":884},"\u002Fdocs\u002Fwebsocket-basics","WebSocket 基础","WebSocket 全双工通信协议的事件、方法与基本用法整理。",[885,856,774,777],"websocket",{"path":887,"title":888,"description":889,"date":890,"category":762,"tags":891},"\u002Fdocs\u002Fmarkdown-syntax","Markdown 语法速查","Markdown 标题、强调、列表、区块引用、代码、表格、转义与 Mermaid 图表语法整理。","2024-10-18",[892,806,777],"markdown",{"path":894,"title":895,"description":896,"date":897,"category":836,"tags":898},"\u002Fdocs\u002Fgojs-getting-started","GoJS 入门实战","从引入方式、画布初始化到节点模板与数据绑定，一份可直接上手的 GoJS 流程图开发笔记。","2024-08-22",[899,774,777],"gojs",{"path":901,"title":902,"description":903,"date":904,"category":836,"tags":905},"\u002Fdocs\u002Fecharts-options-notes","ECharts 配置项速查","整理 ECharts 常用 option 配置：数据格式、坐标轴、图例与交互项的实际用法。","2024-08-09",[906,774,806],"echarts",{"path":908,"title":909,"description":910,"date":911,"category":762,"tags":912},"\u002Fdocs\u002Fyarn-npm-install-errors","yarn \u002F npm 安装报错处理","yarn 引擎版本不兼容时的 ignore-engines 绕过、Windows 刷新 DNS 解析缓存、npm 缓存清理与校验。","2024-08-06",[130,913,824,914],"nodejs","troubleshooting",{"path":916,"title":917,"description":918,"date":919,"category":836,"tags":920},"\u002Fdocs\u002Fgojs-grid-panel","GoJS 网格面板用法","Diagram.grid 默认网格与网格捕捉、单元格尺寸定制，用 LineH\u002FLineV\u002FBarH\u002FBarV 自定义网格样式，以及把 Grid 面板当作节点元素使用。","2024-07-01",[899,774,777],{"path":922,"title":923,"description":924,"date":925,"category":786,"tags":926},"\u002Fdocs\u002Fhttp-status-codes","HTTP 响应状态码详解","按 1xx 到 5xx 分类梳理 HTTP 状态码的含义与典型使用场景。","2024-06-27",[855,856,806],{"path":928,"title":929,"description":930,"date":931,"category":786,"tags":932},"\u002Fdocs\u002Fes6-functions-classes","ES6 函数与 Class","默认参数、rest、箭头函数的 this、Class 方法、访问器、静态成员与继承。","2023-04-26",[774,775,777],{"path":700,"title":934,"description":935,"date":931,"category":762,"tags":936},"Gulp 4 任务与文件流","Gulp 任务完成信号、串并行组合、文件流、资源处理、分阶段输出和文件监听。",[774,913,777],{"path":938,"title":939,"description":940,"date":931,"category":786,"tags":941},"\u002Fdocs\u002Fjs-proxy-reflect","Proxy 与 Reflect 入门","通过属性读取和赋值示例理解 Proxy、Reflect、receiver 与拦截限制。",[774,775,777],{"path":943,"title":944,"description":945,"date":931,"category":762,"tags":946},"\u002Fdocs\u002Fless-basics","Less 语法与编译笔记","变量、嵌套、混合、extend、导入、内置函数和递归生成列的课程示例。",[815,777,806],{"path":705,"title":948,"description":949,"date":931,"category":762,"tags":950},"Webpack 4 配置与开发服务器笔记","课程中的入口出口、loader、plugin、source map、开发代理以及 React 环境配置片段。",[776,774,913,777],{"path":952,"title":953,"description":954,"date":955,"category":786,"tags":956},"\u002Fdocs\u002Fhtml-basics","HTML 基础笔记","HTML 语法规范、常用标签、表格、表单、Canvas 入门与 JavaScript 输出方式速查。","2022-06-10",[814,777,806],1789635934281]