[{"data":1,"prerenderedAt":1031},["ShallowReactive",2],{"\u002Fblog\u002F2025\u002Fnpm-package":3},{"id":4,"title":5,"body":6,"description":90,"extension":1023,"meta":1024,"navigation":210,"path":1027,"seo":1028,"stem":1029,"__hash__":1030},"blog\u002Fblog\u002F2025\u002Fnpm-package.md","发布一个npm包",{"type":7,"value":8,"toc":1012},"minimark",[9,12,17,27,30,34,37,40,43,47,55,58,80,84,999,1002,1008],[10,11,5],"h1",{"id":5},[13,14,16],"h2",{"id":15},"npm","NPM",[18,19,20],"p",{},[21,22,26],"a",{"href":23,"rel":24},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@llds\u002Ftemplate",[25],"nofollow","@llds\u002Ftemplate",[13,28,29],{"id":29},"效果",[31,32],"cus-video",{"src":33},"\u002Fvideo\u002F04_1.mp4",[13,35,36],{"id":36},"用处",[18,38,39],{},"快速创建自己构建的项目模板。",[13,41,42],{"id":42},"实现",[44,45,46],"h3",{"id":46},"预期效果",[18,48,49,50,54],{},"终端输入",[51,52,53],"code",{},"npx @llds\u002Ftemplate","，显示模板列表，选择模板，输入项目名称，即可创建项目。",[44,56,57],{"id":57},"依赖",[59,60,61,68,74],"ul",{},[62,63,64,67],"li",{},[51,65,66],{},"@inquirer\u002Fprompts","：命令行交互",[62,69,70,73],{},[51,71,72],{},"simple-git","：git操作",[62,75,76,79],{},[51,77,78],{},"boxen","：美化终端输出",[44,81,83],{"id":82},"核心代码-indexjs","核心代码 (index.js)",[85,86,91],"pre",{"className":87,"code":88,"language":89,"meta":90,"style":90},"language-js shiki shiki-themes vitesse-light vitesse-dark","#!\u002Fusr\u002Fbin\u002Fenv node\nimport path from 'node:path'\nimport { input, select } from '@inquirer\u002Fprompts'\nimport boxen from 'boxen'\nimport ora from 'ora'\nimport simpleGit from 'simple-git'\n\nconst git = simpleGit()\n\nconst templateChoices = [\n  {\n    name: 'uonvue-template',\n    value: 'git@github.com:llds66\u002Fuonvue-template.git',\n  },\n  {\n    name: 'hono-cf-template',\n    value: 'git@github.com:llds66\u002Fhono-cf-template.git',\n  },\n]\nasync function run() {\n  const repoUrl = await select({\n    message: ' 请选择项目模板：',\n    choices: templateChoices,\n  })\n\n  const projectName = await input({\n    message: ' 请输入项目名称：',\n    default: 'my-app',\n  })\n  if (!projectName) {\n    console.error('项目名称不能为空')\n    return\n  }\n  const targetDir = path.resolve(process.cwd(), projectName)\n  const spinner = ora('正在拉取...').start()\n\n  try {\n    await git.clone(repoUrl, targetDir, ['--depth', '1'])\n    spinner.succeed(' 模板克隆成功！')\n    console.log(`\\n✅ 项目已创建 ${projectName}`)\n    console.log(`\\n✅ 项目位置 ${targetDir}`)\n    console.log(`\\n`)\n    console.log(\n      boxen(`\\n  cd ${projectName} \\n  pnpm i`, {\n        title: '下一步',\n        titleAlignment: 'center',\n        width: 25,\n        borderStyle: 'round',\n        borderColor: 'green',\n      }),\n    )\n  }\n  catch (error) {\n    spinner.fail('克隆模板失败')\n    console.error('❌ 错误：', error.message || error)\n  }\n}\n\nrun()\n","js","",[51,92,93,102,127,156,172,189,205,212,231,236,249,255,276,293,299,304,320,336,341,347,365,384,401,413,419,424,440,456,473,478,498,523,529,535,569,598,603,611,657,679,713,742,761,773,806,823,840,854,871,888,894,900,905,919,940,975,980,986,991],{"__ignoreMap":90},[94,95,98],"span",{"class":96,"line":97},"line",1,[94,99,101],{"class":100},"snYqZ","#!\u002Fusr\u002Fbin\u002Fenv node\n",[94,103,105,109,113,116,120,124],{"class":96,"line":104},2,[94,106,108],{"class":107},"sTPum","import",[94,110,112],{"class":111},"s9nN2"," path",[94,114,115],{"class":107}," from",[94,117,119],{"class":118},"scnC2"," '",[94,121,123],{"class":122},"spP0B","node:path",[94,125,126],{"class":118},"'\n",[94,128,130,132,136,139,142,145,148,150,152,154],{"class":96,"line":129},3,[94,131,108],{"class":107},[94,133,135],{"class":134},"si6no"," {",[94,137,138],{"class":111}," input",[94,140,141],{"class":134},",",[94,143,144],{"class":111}," select",[94,146,147],{"class":134}," }",[94,149,115],{"class":107},[94,151,119],{"class":118},[94,153,66],{"class":122},[94,155,126],{"class":118},[94,157,159,161,164,166,168,170],{"class":96,"line":158},4,[94,160,108],{"class":107},[94,162,163],{"class":111}," boxen",[94,165,115],{"class":107},[94,167,119],{"class":118},[94,169,78],{"class":122},[94,171,126],{"class":118},[94,173,175,177,180,182,184,187],{"class":96,"line":174},5,[94,176,108],{"class":107},[94,178,179],{"class":111}," ora",[94,181,115],{"class":107},[94,183,119],{"class":118},[94,185,186],{"class":122},"ora",[94,188,126],{"class":118},[94,190,192,194,197,199,201,203],{"class":96,"line":191},6,[94,193,108],{"class":107},[94,195,196],{"class":111}," simpleGit",[94,198,115],{"class":107},[94,200,119],{"class":118},[94,202,72],{"class":122},[94,204,126],{"class":118},[94,206,208],{"class":96,"line":207},7,[94,209,211],{"emptyLinePlaceholder":210},true,"\n",[94,213,215,219,222,225,228],{"class":96,"line":214},8,[94,216,218],{"class":217},"s5TCs","const",[94,220,221],{"class":111}," git",[94,223,224],{"class":134}," =",[94,226,196],{"class":227},"s_xSY",[94,229,230],{"class":134},"()\n",[94,232,234],{"class":96,"line":233},9,[94,235,211],{"emptyLinePlaceholder":210},[94,237,239,241,244,246],{"class":96,"line":238},10,[94,240,218],{"class":217},[94,242,243],{"class":111}," templateChoices",[94,245,224],{"class":134},[94,247,248],{"class":134}," [\n",[94,250,252],{"class":96,"line":251},11,[94,253,254],{"class":134},"  {\n",[94,256,258,262,265,267,270,273],{"class":96,"line":257},12,[94,259,261],{"class":260},"sHLBJ","    name",[94,263,264],{"class":134},":",[94,266,119],{"class":118},[94,268,269],{"class":122},"uonvue-template",[94,271,272],{"class":118},"'",[94,274,275],{"class":134},",\n",[94,277,279,282,284,286,289,291],{"class":96,"line":278},13,[94,280,281],{"class":260},"    value",[94,283,264],{"class":134},[94,285,119],{"class":118},[94,287,288],{"class":122},"git@github.com:llds66\u002Fuonvue-template.git",[94,290,272],{"class":118},[94,292,275],{"class":134},[94,294,296],{"class":96,"line":295},14,[94,297,298],{"class":134},"  },\n",[94,300,302],{"class":96,"line":301},15,[94,303,254],{"class":134},[94,305,307,309,311,313,316,318],{"class":96,"line":306},16,[94,308,261],{"class":260},[94,310,264],{"class":134},[94,312,119],{"class":118},[94,314,315],{"class":122},"hono-cf-template",[94,317,272],{"class":118},[94,319,275],{"class":134},[94,321,323,325,327,329,332,334],{"class":96,"line":322},17,[94,324,281],{"class":260},[94,326,264],{"class":134},[94,328,119],{"class":118},[94,330,331],{"class":122},"git@github.com:llds66\u002Fhono-cf-template.git",[94,333,272],{"class":118},[94,335,275],{"class":134},[94,337,339],{"class":96,"line":338},18,[94,340,298],{"class":134},[94,342,344],{"class":96,"line":343},19,[94,345,346],{"class":134},"]\n",[94,348,350,353,356,359,362],{"class":96,"line":349},20,[94,351,352],{"class":217},"async",[94,354,355],{"class":217}," function",[94,357,358],{"class":227}," run",[94,360,361],{"class":134},"()",[94,363,364],{"class":134}," {\n",[94,366,368,371,374,376,379,381],{"class":96,"line":367},21,[94,369,370],{"class":217},"  const",[94,372,373],{"class":111}," repoUrl",[94,375,224],{"class":134},[94,377,378],{"class":107}," await",[94,380,144],{"class":227},[94,382,383],{"class":134},"({\n",[94,385,387,390,392,394,397,399],{"class":96,"line":386},22,[94,388,389],{"class":260},"    message",[94,391,264],{"class":134},[94,393,119],{"class":118},[94,395,396],{"class":122}," 请选择项目模板：",[94,398,272],{"class":118},[94,400,275],{"class":134},[94,402,404,407,409,411],{"class":96,"line":403},23,[94,405,406],{"class":260},"    choices",[94,408,264],{"class":134},[94,410,243],{"class":111},[94,412,275],{"class":134},[94,414,416],{"class":96,"line":415},24,[94,417,418],{"class":134},"  })\n",[94,420,422],{"class":96,"line":421},25,[94,423,211],{"emptyLinePlaceholder":210},[94,425,427,429,432,434,436,438],{"class":96,"line":426},26,[94,428,370],{"class":217},[94,430,431],{"class":111}," projectName",[94,433,224],{"class":134},[94,435,378],{"class":107},[94,437,138],{"class":227},[94,439,383],{"class":134},[94,441,443,445,447,449,452,454],{"class":96,"line":442},27,[94,444,389],{"class":260},[94,446,264],{"class":134},[94,448,119],{"class":118},[94,450,451],{"class":122}," 请输入项目名称：",[94,453,272],{"class":118},[94,455,275],{"class":134},[94,457,459,462,464,466,469,471],{"class":96,"line":458},28,[94,460,461],{"class":260},"    default",[94,463,264],{"class":134},[94,465,119],{"class":118},[94,467,468],{"class":122},"my-app",[94,470,272],{"class":118},[94,472,275],{"class":134},[94,474,476],{"class":96,"line":475},29,[94,477,418],{"class":134},[94,479,481,484,487,490,493,496],{"class":96,"line":480},30,[94,482,483],{"class":107},"  if",[94,485,486],{"class":134}," (",[94,488,489],{"class":217},"!",[94,491,492],{"class":111},"projectName",[94,494,495],{"class":134},")",[94,497,364],{"class":134},[94,499,501,504,507,510,513,515,518,520],{"class":96,"line":500},31,[94,502,503],{"class":111},"    console",[94,505,506],{"class":134},".",[94,508,509],{"class":227},"error",[94,511,512],{"class":134},"(",[94,514,272],{"class":118},[94,516,517],{"class":122},"项目名称不能为空",[94,519,272],{"class":118},[94,521,522],{"class":134},")\n",[94,524,526],{"class":96,"line":525},32,[94,527,528],{"class":107},"    return\n",[94,530,532],{"class":96,"line":531},33,[94,533,534],{"class":134},"  }\n",[94,536,538,540,543,545,547,549,552,554,557,559,562,565,567],{"class":96,"line":537},34,[94,539,370],{"class":217},[94,541,542],{"class":111}," targetDir",[94,544,224],{"class":134},[94,546,112],{"class":111},[94,548,506],{"class":134},[94,550,551],{"class":227},"resolve",[94,553,512],{"class":134},[94,555,556],{"class":111},"process",[94,558,506],{"class":134},[94,560,561],{"class":227},"cwd",[94,563,564],{"class":134},"(),",[94,566,431],{"class":111},[94,568,522],{"class":134},[94,570,572,574,577,579,581,583,585,588,590,593,596],{"class":96,"line":571},35,[94,573,370],{"class":217},[94,575,576],{"class":111}," spinner",[94,578,224],{"class":134},[94,580,179],{"class":227},[94,582,512],{"class":134},[94,584,272],{"class":118},[94,586,587],{"class":122},"正在拉取...",[94,589,272],{"class":118},[94,591,592],{"class":134},").",[94,594,595],{"class":227},"start",[94,597,230],{"class":134},[94,599,601],{"class":96,"line":600},36,[94,602,211],{"emptyLinePlaceholder":210},[94,604,606,609],{"class":96,"line":605},37,[94,607,608],{"class":107},"  try",[94,610,364],{"class":134},[94,612,614,617,619,621,624,626,629,631,633,635,638,640,643,645,647,649,652,654],{"class":96,"line":613},38,[94,615,616],{"class":107},"    await",[94,618,221],{"class":111},[94,620,506],{"class":134},[94,622,623],{"class":227},"clone",[94,625,512],{"class":134},[94,627,628],{"class":111},"repoUrl",[94,630,141],{"class":134},[94,632,542],{"class":111},[94,634,141],{"class":134},[94,636,637],{"class":134}," [",[94,639,272],{"class":118},[94,641,642],{"class":122},"--depth",[94,644,272],{"class":118},[94,646,141],{"class":134},[94,648,119],{"class":118},[94,650,651],{"class":122},"1",[94,653,272],{"class":118},[94,655,656],{"class":134},"])\n",[94,658,660,663,665,668,670,672,675,677],{"class":96,"line":659},39,[94,661,662],{"class":111},"    spinner",[94,664,506],{"class":134},[94,666,667],{"class":227},"succeed",[94,669,512],{"class":134},[94,671,272],{"class":118},[94,673,674],{"class":122}," 模板克隆成功！",[94,676,272],{"class":118},[94,678,522],{"class":134},[94,680,682,684,686,689,691,694,698,701,704,706,709,711],{"class":96,"line":681},40,[94,683,503],{"class":111},[94,685,506],{"class":134},[94,687,688],{"class":227},"log",[94,690,512],{"class":134},[94,692,693],{"class":118},"`",[94,695,697],{"class":696},"sfsYZ","\\n",[94,699,700],{"class":122},"✅ 项目已创建 ",[94,702,703],{"class":107},"${",[94,705,492],{"class":122},[94,707,708],{"class":107},"}",[94,710,693],{"class":118},[94,712,522],{"class":134},[94,714,716,718,720,722,724,726,728,731,733,736,738,740],{"class":96,"line":715},41,[94,717,503],{"class":111},[94,719,506],{"class":134},[94,721,688],{"class":227},[94,723,512],{"class":134},[94,725,693],{"class":118},[94,727,697],{"class":696},[94,729,730],{"class":122},"✅ 项目位置 ",[94,732,703],{"class":107},[94,734,735],{"class":122},"targetDir",[94,737,708],{"class":107},[94,739,693],{"class":118},[94,741,522],{"class":134},[94,743,745,747,749,751,753,755,757,759],{"class":96,"line":744},42,[94,746,503],{"class":111},[94,748,506],{"class":134},[94,750,688],{"class":227},[94,752,512],{"class":134},[94,754,693],{"class":118},[94,756,697],{"class":696},[94,758,693],{"class":118},[94,760,522],{"class":134},[94,762,764,766,768,770],{"class":96,"line":763},43,[94,765,503],{"class":111},[94,767,506],{"class":134},[94,769,688],{"class":227},[94,771,772],{"class":134},"(\n",[94,774,776,779,781,783,785,788,790,792,794,797,800,802,804],{"class":96,"line":775},44,[94,777,778],{"class":227},"      boxen",[94,780,512],{"class":134},[94,782,693],{"class":118},[94,784,697],{"class":696},[94,786,787],{"class":122},"  cd ",[94,789,703],{"class":107},[94,791,492],{"class":122},[94,793,708],{"class":107},[94,795,796],{"class":696}," \\n",[94,798,799],{"class":122},"  pnpm i",[94,801,693],{"class":118},[94,803,141],{"class":134},[94,805,364],{"class":134},[94,807,809,812,814,816,819,821],{"class":96,"line":808},45,[94,810,811],{"class":260},"        title",[94,813,264],{"class":134},[94,815,119],{"class":118},[94,817,818],{"class":122},"下一步",[94,820,272],{"class":118},[94,822,275],{"class":134},[94,824,826,829,831,833,836,838],{"class":96,"line":825},46,[94,827,828],{"class":260},"        titleAlignment",[94,830,264],{"class":134},[94,832,119],{"class":118},[94,834,835],{"class":122},"center",[94,837,272],{"class":118},[94,839,275],{"class":134},[94,841,843,846,848,852],{"class":96,"line":842},47,[94,844,845],{"class":260},"        width",[94,847,264],{"class":134},[94,849,851],{"class":850},"sqbOQ"," 25",[94,853,275],{"class":134},[94,855,857,860,862,864,867,869],{"class":96,"line":856},48,[94,858,859],{"class":260},"        borderStyle",[94,861,264],{"class":134},[94,863,119],{"class":118},[94,865,866],{"class":122},"round",[94,868,272],{"class":118},[94,870,275],{"class":134},[94,872,874,877,879,881,884,886],{"class":96,"line":873},49,[94,875,876],{"class":260},"        borderColor",[94,878,264],{"class":134},[94,880,119],{"class":118},[94,882,883],{"class":122},"green",[94,885,272],{"class":118},[94,887,275],{"class":134},[94,889,891],{"class":96,"line":890},50,[94,892,893],{"class":134},"      }),\n",[94,895,897],{"class":96,"line":896},51,[94,898,899],{"class":134},"    )\n",[94,901,903],{"class":96,"line":902},52,[94,904,534],{"class":134},[94,906,908,911,913,915,917],{"class":96,"line":907},53,[94,909,910],{"class":107},"  catch",[94,912,486],{"class":134},[94,914,509],{"class":111},[94,916,495],{"class":134},[94,918,364],{"class":134},[94,920,922,924,926,929,931,933,936,938],{"class":96,"line":921},54,[94,923,662],{"class":111},[94,925,506],{"class":134},[94,927,928],{"class":227},"fail",[94,930,512],{"class":134},[94,932,272],{"class":118},[94,934,935],{"class":122},"克隆模板失败",[94,937,272],{"class":118},[94,939,522],{"class":134},[94,941,943,945,947,949,951,953,956,958,960,963,965,968,971,973],{"class":96,"line":942},55,[94,944,503],{"class":111},[94,946,506],{"class":134},[94,948,509],{"class":227},[94,950,512],{"class":134},[94,952,272],{"class":118},[94,954,955],{"class":122},"❌ 错误：",[94,957,272],{"class":118},[94,959,141],{"class":134},[94,961,962],{"class":111}," error",[94,964,506],{"class":134},[94,966,967],{"class":111},"message",[94,969,970],{"class":217}," ||",[94,972,962],{"class":111},[94,974,522],{"class":134},[94,976,978],{"class":96,"line":977},56,[94,979,534],{"class":134},[94,981,983],{"class":96,"line":982},57,[94,984,985],{"class":134},"}\n",[94,987,989],{"class":96,"line":988},58,[94,990,211],{"emptyLinePlaceholder":210},[94,992,994,997],{"class":96,"line":993},59,[94,995,996],{"class":227},"run",[94,998,230],{"class":134},[44,1000,1001],{"id":1001},"发布",[18,1003,1004,1005],{},"发布到NPM ",[51,1006,1007],{},"npm publish",[1009,1010,1011],"style",{},"html pre.shiki code .snYqZ, html code.shiki .snYqZ{--shiki-default:#A0ADA0;--shiki-dark:#758575DD}html pre.shiki code .sTPum, html code.shiki .sTPum{--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .s9nN2, html code.shiki .s9nN2{--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .scnC2, html code.shiki .scnC2{--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .spP0B, html code.shiki .spP0B{--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .si6no, html code.shiki .si6no{--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .s5TCs, html code.shiki .s5TCs{--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .s_xSY, html code.shiki .s_xSY{--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sHLBJ, html code.shiki .sHLBJ{--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sfsYZ, html code.shiki .sfsYZ{--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sqbOQ, html code.shiki .sqbOQ{--shiki-default:#2F798A;--shiki-dark:#4C9A91}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);}",{"title":90,"searchDepth":104,"depth":104,"links":1013},[1014,1015,1016,1017],{"id":15,"depth":104,"text":16},{"id":29,"depth":104,"text":29},{"id":36,"depth":104,"text":36},{"id":42,"depth":104,"text":42,"children":1018},[1019,1020,1021,1022],{"id":46,"depth":129,"text":46},{"id":57,"depth":129,"text":57},{"id":82,"depth":129,"text":83},{"id":1001,"depth":129,"text":1001},"md",{"date":1025,"time":1026},"7-18","3min","\u002Fblog\u002F2025\u002Fnpm-package",{"title":5,"description":90},"blog\u002F2025\u002Fnpm-package","NCQdSE07xdbxbkCtkK5Eh-I41_OQQC3hW38EE9r9KC8",1779434092963]