@huberyyang/create-todo-vue 1.7.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/index.js +2 -2
- package/package.json +1 -1
- package/template-vue-dev/.husky/commit-msg +1 -0
- package/template-vue-dev/.husky/pre-commit +1 -0
- package/template-vue-dev/.vscode/extensions.json +3 -0
- package/template-vue-dev/.vscode/settings.json +50 -0
- package/template-vue-dev/README.md +1 -0
- package/template-vue-dev/_gitignore +24 -0
- package/template-vue-dev/auto-imports.d.ts +619 -0
- package/template-vue-dev/commitlint.config.ts +18 -0
- package/template-vue-dev/components.d.ts +24 -0
- package/template-vue-dev/eslint.config.ts +48 -0
- package/template-vue-dev/index.html +24 -0
- package/template-vue-dev/lint-staged.config.mjs +3 -0
- package/template-vue-dev/package.json +52 -0
- package/template-vue-dev/pnpm-workspace.yaml +5 -0
- package/template-vue-dev/public/vite.svg +1 -0
- package/template-vue-dev/shims.d.ts +6 -0
- package/template-vue-dev/src/App.vue +16 -0
- package/template-vue-dev/src/assets/vue.svg +1 -0
- package/template-vue-dev/src/components/BaseFooter.vue +8 -0
- package/template-vue-dev/src/composables/useDark.ts +2 -0
- package/template-vue-dev/src/main.ts +15 -0
- package/template-vue-dev/src/pages/[...all].vue +5 -0
- package/template-vue-dev/src/pages/article/[id].vue +13 -0
- package/template-vue-dev/src/pages/index.vue +85 -0
- package/template-vue-dev/src/pages/test.vue +17 -0
- package/template-vue-dev/src/styles/main.scss +6 -0
- package/template-vue-dev/src/styles/variables.scss +7 -0
- package/template-vue-dev/src/types/index.d.ts +1 -0
- package/template-vue-dev/src/types/vite-env.d.ts +2 -0
- package/template-vue-dev/tsconfig.json +27 -0
- package/template-vue-dev/typed-router.d.ts +121 -0
- package/template-vue-dev/uno.config.ts +29 -0
- package/template-vue-dev/vite.config.ts +85 -0
package/README.md
CHANGED
|
@@ -87,6 +87,7 @@ npm create @huberyyang/todo-vue .foo --overwrite -t vue-ts --no-immediate --pack
|
|
|
87
87
|
|
|
88
88
|
- `vanilla` / `vanilla-ts`
|
|
89
89
|
- `vue` / `vue-ts`
|
|
90
|
+
- `vue-dev`:比 vue-ts 重一档,预装 unocss、vueuse、vue-router 自动路由、element-plus 图标、自动导入,以及 eslint + husky + commitlint 一整套工具链
|
|
90
91
|
- `lit` / `lit-ts`
|
|
91
92
|
|
|
92
93
|
转交上游脚手架的模板(同样 `-t` 可直接指定,交互式在 Vue 下也能选到):
|
package/dist/index.js
CHANGED
|
@@ -54,7 +54,7 @@ ${r}`:``}`}default:return`${n}${t?`${s(`cyan`,V)} `:``}${i}
|
|
|
54
54
|
${t?s(`cyan`,H):``}
|
|
55
55
|
`}}}).prompt();var Je=_(((e,t)=>{t.exports=a,a.sync=o;var n=b(`fs`);function r(e,t){var n=t.pathExt===void 0?process.env.PATHEXT:t.pathExt;if(!n||(n=n.split(`;`),n.indexOf(``)!==-1))return!0;for(var r=0;r<n.length;r++){var i=n[r].toLowerCase();if(i&&e.substr(-i.length).toLowerCase()===i)return!0}return!1}function i(e,t,n){return!e.isSymbolicLink()&&!e.isFile()?!1:r(t,n)}function a(e,t,r){n.stat(e,function(n,a){r(n,!n&&i(a,e,t))})}function o(e,t){return i(n.statSync(e),e,t)}})),Ye=_(((e,t)=>{t.exports=r,r.sync=i;var n=b(`fs`);function r(e,t,r){n.stat(e,function(e,n){r(e,!e&&a(n,t))})}function i(e,t){return a(n.statSync(e),t)}function a(e,t){return e.isFile()&&o(e,t)}function o(e,t){var n=e.mode,r=e.uid,i=e.gid,a=t.uid===void 0?process.getuid&&process.getuid():t.uid,o=t.gid===void 0?process.getgid&&process.getgid():t.gid,s=64,c=8,l=1,u=s|c;return n&l||n&c&&i===o||n&s&&r===a||n&u&&a===0}})),Xe=_(((e,t)=>{b(`fs`);var n=process.platform===`win32`||global.TESTING_WINDOWS?Je():Ye();t.exports=r,r.sync=i;function r(e,t,i){if(typeof t==`function`&&(i=t,t={}),!i){if(typeof Promise!=`function`)throw TypeError(`callback not provided`);return new Promise(function(n,i){r(e,t||{},function(e,t){e?i(e):n(t)})})}n(e,t||{},function(e,n){e&&(e.code===`EACCES`||t&&t.ignoreErrors)&&(e=null,n=!1),i(e,n)})}function i(e,t){try{return n.sync(e,t||{})}catch(e){if(t&&t.ignoreErrors||e.code===`EACCES`)return!1;throw e}}})),Ze=_(((e,t)=>{let n=process.platform===`win32`||process.env.OSTYPE===`cygwin`||process.env.OSTYPE===`msys`,r=b(`path`),i=n?`;`:`:`,a=Xe(),o=e=>Object.assign(Error(`not found: ${e}`),{code:`ENOENT`}),s=(e,t)=>{let r=t.colon||i,a=e.match(/\//)||n&&e.match(/\\/)?[``]:[...n?[process.cwd()]:[],...(t.path||process.env.PATH||``).split(r)],o=n?t.pathExt||process.env.PATHEXT||`.EXE;.CMD;.BAT;.COM`:``,s=n?o.split(r):[``];return n&&e.indexOf(`.`)!==-1&&s[0]!==``&&s.unshift(``),{pathEnv:a,pathExt:s,pathExtExe:o}},c=(e,t,n)=>{typeof t==`function`&&(n=t,t={}),t||={};let{pathEnv:i,pathExt:c,pathExtExe:l}=s(e,t),u=[],d=n=>new Promise((a,s)=>{if(n===i.length)return t.all&&u.length?a(u):s(o(e));let c=i[n],l=/^".*"$/.test(c)?c.slice(1,-1):c,d=r.join(l,e),p=!l&&/^\.[\\\/]/.test(e)?e.slice(0,2)+d:d;a(f(p,n,0))}),f=(e,n,r)=>new Promise((i,o)=>{if(r===c.length)return i(d(n+1));let s=c[r];a(e+s,{pathExt:l},(a,o)=>{if(!a&&o){if(t.all)u.push(e+s);else return i(e+s)}return i(f(e,n,r+1))})});return n?d(0).then(e=>n(null,e),n):d(0)};t.exports=c,c.sync=(e,t)=>{t||={};let{pathEnv:n,pathExt:i,pathExtExe:c}=s(e,t),l=[];for(let o=0;o<n.length;o++){let s=n[o],u=/^".*"$/.test(s)?s.slice(1,-1):s,d=r.join(u,e),f=!u&&/^\.[\\\/]/.test(e)?e.slice(0,2)+d:d;for(let e=0;e<i.length;e++){let n=f+i[e];try{if(a.sync(n,{pathExt:c})){if(t.all)l.push(n);else return n}}catch{}}}if(t.all&&l.length)return l;if(t.nothrow)return null;throw o(e)}})),Qe=_(((e,t)=>{let n=(e={})=>{let t=e.env||process.env;return(e.platform||process.platform)===`win32`?Object.keys(t).reverse().find(e=>e.toUpperCase()===`PATH`)||`Path`:`PATH`};t.exports=n,t.exports.default=n})),$e=_(((e,t)=>{let n=b(`path`),r=Ze(),i=Qe();function a(e,t){let a=e.options.env||process.env,o=process.cwd(),s=e.options.cwd!=null,c=s&&process.chdir!==void 0&&!process.chdir.disabled;if(c)try{process.chdir(e.options.cwd)}catch{}let l;try{l=r.sync(e.command,{path:a[i({env:a})],pathExt:t?n.delimiter:void 0})}catch{}finally{c&&process.chdir(o)}return l&&=n.resolve(s?e.options.cwd:``,l),l}function o(e){return a(e)||a(e,!0)}t.exports=o})),et=_(((e,t)=>{let n=/([()\][%!^"`<>&|;, *?])/g;function r(e){return e=e.replace(n,`^$1`),e}function i(e,t){return e=`${e}`,e=e.replace(/(?=(\\+?)?)\1"/g,`$1$1\\"`),e=e.replace(/(?=(\\+?)?)\1$/,`$1$1`),e=`"${e}"`,e=e.replace(n,`^$1`),t&&(e=e.replace(n,`^$1`)),e}t.exports.command=r,t.exports.argument=i})),tt=_(((e,t)=>{t.exports=/^#!(.*)/})),nt=_(((e,t)=>{let n=tt();t.exports=(e=``)=>{let t=e.match(n);if(!t)return null;let[r,i]=t[0].replace(/#! ?/,``).split(` `),a=r.split(`/`).pop();return a===`env`?i:i?`${a} ${i}`:a}})),rt=_(((e,t)=>{let n=b(`fs`),r=nt();function i(e){let t=Buffer.alloc(150),i;try{i=n.openSync(e,`r`),n.readSync(i,t,0,150,0),n.closeSync(i)}catch{}return r(t.toString())}t.exports=i})),it=_(((e,t)=>{let n=b(`path`),r=$e(),i=et(),a=rt(),o=process.platform===`win32`,s=/\.(?:com|exe)$/i,c=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function l(e){e.file=r(e);let t=e.file&&a(e.file);return t?(e.args.unshift(e.file),e.command=t,r(e)):e.file}function u(e){if(!o)return e;let t=l(e),r=!s.test(t);if(e.options.forceShell||r){let r=c.test(t);e.command=n.normalize(e.command),e.command=i.command(e.command),e.args=e.args.map(e=>i.argument(e,r)),e.args=[`/d`,`/s`,`/c`,`"${[e.command].concat(e.args).join(` `)}"`],e.command=process.env.comspec||`cmd.exe`,e.options.windowsVerbatimArguments=!0}return e}function d(e,t,n){t&&!Array.isArray(t)&&(n=t,t=null),t=t?t.slice(0):[],n=Object.assign({},n);let r={command:e,args:t,options:n,file:void 0,original:{command:e,args:t}};return n.shell?r:u(r)}t.exports=d})),at=_(((e,t)=>{let n=process.platform===`win32`;function r(e,t){return Object.assign(Error(`${t} ${e.command} ENOENT`),{code:`ENOENT`,errno:`ENOENT`,syscall:`${t} ${e.command}`,path:e.command,spawnargs:e.args})}function i(e,t){if(!n)return;let r=e.emit;e.emit=function(n,i){if(n===`exit`){let n=a(i,t);if(n)return r.call(e,`error`,n)}return r.apply(e,arguments)}}function a(e,t){return n&&e===1&&!t.file?r(t.original,`spawn`):null}function o(e,t){return n&&e===1&&!t.file?r(t.original,`spawnSync`):null}t.exports={hookChildProcess:i,verifyENOENT:a,verifyENOENTSync:o,notFoundError:r}})),ot=_(((e,t)=>{let n=b(`child_process`),r=it(),i=at();function a(e,t,a){let o=r(e,t,a),s=n.spawn(o.command,o.args,o.options);return i.hookChildProcess(s,o),s}function o(e,t,a){let o=r(e,t,a),s=n.spawnSync(o.command,o.args,o.options);return s.error=s.error||i.verifyENOENTSync(s.status,o),s}t.exports=a,t.exports.spawn=a,t.exports.sync=o,t.exports._parse=r,t.exports._enoent=i})),st=_(((e,t)=>{function n(e){return e==null?[]:Array.isArray(e)?e:[e]}function r(e,t,n,r){var i,a=e[t],o=~r.string.indexOf(t)?n==null||n===!0?``:String(n):typeof n==`boolean`?n:~r.boolean.indexOf(t)?n===`false`?!1:n===`true`||(e._.push((i=+n,i*0==0?i:n)),!!n):(i=+n,i*0==0?i:n);e[t]=a==null?o:Array.isArray(a)?a.concat(o):[a,o]}t.exports=function(e,t){e||=[],t||={};var i,a,o,s,c,l={_:[]},u=0,d=0,f=0,p=e.length;let m=t.alias!==void 0,h=t.unknown!==void 0,g=t.default!==void 0;if(t.alias=t.alias||{},t.string=n(t.string),t.boolean=n(t.boolean),m)for(i in t.alias)for(a=t.alias[i]=n(t.alias[i]),u=0;u<a.length;u++)(t.alias[a[u]]=a.concat(i)).splice(u,1);for(u=t.boolean.length;u-->0;)for(a=t.alias[t.boolean[u]]||[],d=a.length;d-->0;)t.boolean.push(a[d]);for(u=t.string.length;u-->0;)for(a=t.alias[t.string[u]]||[],d=a.length;d-->0;)t.string.push(a[d]);if(g){for(i in t.default)if(s=typeof t.default[i],a=t.alias[i]=t.alias[i]||[],t[s]!==void 0)for(t[s].push(i),u=0;u<a.length;u++)t[s].push(a[u])}let _=h?Object.keys(t.alias):[];for(u=0;u<p;u++){if(o=e[u],o===`--`){l._=l._.concat(e.slice(++u));break}for(d=0;d<o.length&&o.charCodeAt(d)===45;d++);if(d===0)l._.push(o);else if(o.substring(d,d+3)===`no-`){if(s=o.substring(d+3),h&&!~_.indexOf(s))return t.unknown(o);l[s]=!1}else{for(f=d+1;f<o.length&&o.charCodeAt(f)!==61;f++);for(s=o.substring(d,f),c=o.substring(++f)||u+1===p||(``+e[u+1]).charCodeAt(0)===45||e[++u],a=d===2?[s]:s,f=0;f<a.length;f++){if(s=a[f],h&&!~_.indexOf(s))return t.unknown(`-`.repeat(d)+s);r(l,s,f+1<a.length||c,t)}}}if(g)for(i in t.default)l[i]===void 0&&(l[i]=t.default[i]);if(m)for(i in l)for(a=t.alias[i]||[];a.length>0;)l[a.shift()]=l[i];return l}})),ct=_(((e,t)=>{let n=process||{},r=n.argv||[],i=n.env||{},a=!(i.NO_COLOR||r.includes(`--no-color`))&&(!!i.FORCE_COLOR||r.includes(`--color`)||n.platform===`win32`||(n.stdout||{}).isTTY&&i.TERM!==`dumb`||!!i.CI),o=(e,t,n=e)=>r=>{let i=``+r,a=i.indexOf(t,e.length);return~a?e+s(i,t,n,a)+t:e+i+t},s=(e,t,n,r)=>{let i=``,a=0;do i+=e.substring(a,r)+n,a=r+t.length,r=e.indexOf(t,a);while(~r);return i+e.substring(a)},c=(e=a)=>{let t=e?o:()=>String;return{isColorSupported:e,reset:t(`\x1B[0m`,`\x1B[0m`),bold:t(`\x1B[1m`,`\x1B[22m`,`\x1B[22m\x1B[1m`),dim:t(`\x1B[2m`,`\x1B[22m`,`\x1B[22m\x1B[2m`),italic:t(`\x1B[3m`,`\x1B[23m`),underline:t(`\x1B[4m`,`\x1B[24m`),inverse:t(`\x1B[7m`,`\x1B[27m`),hidden:t(`\x1B[8m`,`\x1B[28m`),strikethrough:t(`\x1B[9m`,`\x1B[29m`),black:t(`\x1B[30m`,`\x1B[39m`),red:t(`\x1B[31m`,`\x1B[39m`),green:t(`\x1B[32m`,`\x1B[39m`),yellow:t(`\x1B[33m`,`\x1B[39m`),blue:t(`\x1B[34m`,`\x1B[39m`),magenta:t(`\x1B[35m`,`\x1B[39m`),cyan:t(`\x1B[36m`,`\x1B[39m`),white:t(`\x1B[37m`,`\x1B[39m`),gray:t(`\x1B[90m`,`\x1B[39m`),bgBlack:t(`\x1B[40m`,`\x1B[49m`),bgRed:t(`\x1B[41m`,`\x1B[49m`),bgGreen:t(`\x1B[42m`,`\x1B[49m`),bgYellow:t(`\x1B[43m`,`\x1B[49m`),bgBlue:t(`\x1B[44m`,`\x1B[49m`),bgMagenta:t(`\x1B[45m`,`\x1B[49m`),bgCyan:t(`\x1B[46m`,`\x1B[49m`),bgWhite:t(`\x1B[47m`,`\x1B[49m`),blackBright:t(`\x1B[90m`,`\x1B[39m`),redBright:t(`\x1B[91m`,`\x1B[39m`),greenBright:t(`\x1B[92m`,`\x1B[39m`),yellowBright:t(`\x1B[93m`,`\x1B[39m`),blueBright:t(`\x1B[94m`,`\x1B[39m`),magentaBright:t(`\x1B[95m`,`\x1B[39m`),cyanBright:t(`\x1B[96m`,`\x1B[39m`),whiteBright:t(`\x1B[97m`,`\x1B[39m`),bgBlackBright:t(`\x1B[100m`,`\x1B[49m`),bgRedBright:t(`\x1B[101m`,`\x1B[49m`),bgGreenBright:t(`\x1B[102m`,`\x1B[49m`),bgYellowBright:t(`\x1B[103m`,`\x1B[49m`),bgBlueBright:t(`\x1B[104m`,`\x1B[49m`),bgMagentaBright:t(`\x1B[105m`,`\x1B[49m`),bgCyanBright:t(`\x1B[106m`,`\x1B[49m`),bgWhiteBright:t(`\x1B[107m`,`\x1B[49m`)}};t.exports=c(),t.exports.createColors=c})),lt=y(ot(),1),ut=y(st(),1),dt=y(ct(),1);function ft(e,t=80){let n=e=>e.variants?.length?e.variants.map(e=>e.name):[e.name],r=Math.max(0,...e.flatMap(n).map(e=>e.length))+2,i=Math.max(1,Math.floor(t/r));return e.map(e=>{let t=n(e),a=[];for(let e=0;e<t.length;e+=i)a.push(t.slice(e,e+i).map(e=>e.padEnd(r)).join(``).trimEnd());return a.map(t=>e.color(t)).join(`
|
|
56
56
|
`)}).join(`
|
|
57
|
-
`)}const{green:pt,yellow:J,blue:mt,
|
|
57
|
+
`)}const{green:pt,yellow:J,blue:mt,cyan:ht,redBright:gt,greenBright:Y}=dt.default,_t=`vue-project`,vt={boolean:[`help`,`version`,`overwrite`,`immediate`],alias:{h:`help`,v:`version`,t:`template`,i:`immediate`},string:[`template`,`package-name`]},X=[{name:`vanilla`,display:`Vanilla`,color:J,variants:[{name:`vanilla-ts`,display:`TypeScript`,color:mt},{name:`vanilla`,display:`JavaScript`,color:J}]},{name:`vue`,display:`Vue`,color:pt,variants:[{name:`vue-ts`,display:`TypeScript`,color:mt},{name:`vue`,display:`JavaScript`,color:J},{name:`vue-dev`,display:`TypeScript + 工具链`,color:ht},{name:`custom-create-vue`,display:`Official Vue Starter ↗`,color:pt,customCommand:`npm create vue@latest TARGET_DIR`},{name:`custom-nuxt`,display:`Nuxt ↗`,link:`https://nuxt.com`,color:Y,customCommand:`npm exec nuxi init TARGET_DIR`},{name:`custom-vike-vue`,display:`Vike ↗`,link:`https://vike.dev`,color:Y,customCommand:`npm create -- vike@latest --vue TARGET_DIR`},{name:`custom-vitesse`,display:`Vitesse ↗`,link:`https://github.com/antfu-collective/vitesse`,color:Y,customCommand:`npm exec degit antfu-collective/vitesse TARGET_DIR`},{name:`custom-vitesse-lite`,display:`Vitesse Lite ↗`,link:`https://github.com/antfu-collective/vitesse-lite`,color:Y,customCommand:`npm exec degit antfu-collective/vitesse-lite TARGET_DIR`}]},{name:`lit`,display:`Lit`,color:gt,variants:[{name:`lit-ts`,display:`TypeScript`,color:mt},{name:`lit`,display:`JavaScript`,color:J}]}],yt=`\
|
|
58
58
|
用法: @huberyyang/create-todo-vue [参数]... [目录]
|
|
59
59
|
|
|
60
60
|
快速创建vue模板
|
|
@@ -68,4 +68,4 @@ ${t?s(`cyan`,H):``}
|
|
|
68
68
|
--package-name 指定 package.json 的 name
|
|
69
69
|
|
|
70
70
|
可用模板:
|
|
71
|
-
${ft(X)}`,
|
|
71
|
+
${ft(X)}`,bt=X.flatMap(e=>e.variants?.length?e.variants.map(e=>e.name):e.name),xt={_gitignore:`.gitignore`},St=Symbol(`stdin-eof`);var Ct=class extends Error{step;hint;constructor(e,t){super(`需要交互才能继续:${e}`),this.step=e,this.hint=t,this.name=`NonInteractiveError`}};async function Z(e,t,n,i=r.stdin){let a=()=>{},o=new Promise(e=>{if(a=()=>e(St),i.readableEnded){e(St);return}i.once(`end`,a),i.once(`close`,a)});try{let r=await Promise.race([e,o]);if(r===St)throw new Ct(t,n);return r}finally{i.off(`end`,a),i.off(`close`,a)}}function wt(e){let r=n.resolve(e);for(;;){let e=n.join(r,`package.json`);if(t.existsSync(e))return e;let i=n.dirname(r);if(i===r)return;r=i}}function Tt(e){let n=wt(e);if(!n)return`unknown`;try{return JSON.parse(t.readFileSync(n,`utf-8`)).version??`unknown`}catch{return`unknown`}}function Et(e){return e.trim().replace(/\/+$/g,``)}function Dt(e){if(!e)return;let t=e.split(` `)[0].split(`/`);return{name:t[0],version:t[1]}}function Ot(){return Ve(`操作已取消`)}function kt(e){return t.existsSync(e)?t.statSync(e).isDirectory()?`dir`:`file`:`missing`}function At(e){let n=t.readdirSync(e);return n.length===0||n.length===1&&n[0]===`.git`}function jt(e){if(!t.existsSync(e))return!1;for(let r of t.readdirSync(e))r!==`.git`&&t.rmSync(n.resolve(e,r),{recursive:!0,force:!0})}function Mt(e){return/^(?:@[a-z\d\-*~][a-z\d\-*._~]*\/)?[a-z\d\-~][a-z\d\-._~]*$/.test(e)}function Nt(e){return e.trim().toLowerCase().replace(/\s+/g,`-`).replace(/^[._]/,``).replace(/[^a-z\d\-~]+/g,`-`)}function Pt(e,t){let n=t?.name||`npm`,r=n===`yarn`&&t?.version?.startsWith(`1.`);return e.replace(/^npm create (?:-- )?/,()=>n===`bun`?`bun x create-`:n===`deno`?`deno run -A npm:create-`:n===`pnpm`?`pnpm create `:e.startsWith(`npm create -- `)?`${n} create -- `:`${n} create `).replace(`@latest`,r?``:`@latest`).replace(/^npm exec /,()=>n===`pnpm`?`pnpm dlx `:n===`yarn`&&!r?`yarn dlx `:n===`bun`?`bun x `:n===`deno`?`deno run -A npm:`:`npm exec `)}function Ft(e){let{display:t,name:n,color:r,link:i}=e,a=r(t||n);return i&&(a+=` ${(0,dt.underline)(i)}`),a}function It(e,r){t.mkdirSync(r,{recursive:!0});for(let i of t.readdirSync(e))Lt(n.resolve(e,i),n.resolve(r,i))}function Lt(e,n){t.statSync(e).isDirectory()?It(e,n):t.copyFileSync(e,n)}function Rt(e){return e===`yarn`?[e]:[e,`install`]}function zt(e,t){return e===`yarn`?[e,t]:[e,`run`,t]}function Bt([e,...t],n){let{status:r,error:i}=lt.default.sync(e,t,n);return i?(console.error(`\n${e} ${t.join(` `)} 跑不起来:${i.message}`),1):r??1}function Vt(e,t){return G.step(`使用 ${t} 安装依赖...`),Bt(Rt(t),{stdio:`inherit`,cwd:e})}function Ht(e){let r=n.resolve(e);for(;;){let e=n.join(r,`.git`);if(t.existsSync(e))return e;let i=n.dirname(r);if(i===r)return;r=i}}function Ut(e){return Bt([`git`,`init`],{stdio:`ignore`,cwd:e})}function Wt(e,t){return e&&!t.includes(e)?{template:void 0,invalid:!0}:{template:e,invalid:!1}}function Gt(e,t){let r=n.basename(n.resolve(t,e));return{name:r,needsPrompt:!Mt(r)}}function Kt(e){return e===void 0||Mt(e)}function qt(e,t,n){return e===void 0?Gt(t,n):{name:e,needsPrompt:!1}}function Jt(e,t){let{customCommand:n}=e.flatMap(e=>e.variants?.length?e.variants:e).find(e=>e.name===t)??{};return n}function Yt(e,t){let[n,...r]=e.split(` `);return{command:n,args:r.map(e=>e.replace(`TARGET_DIR`,t))}}function Xt(e,t){let n=e=>t[e]??e,r=e.filter(e=>e!==`package.json`).map(e=>({kind:e===`index.html`?`index-html`:`copy`,from:e,to:n(e)}));return r.push({kind:`package-json`,from:`package.json`,to:n(`package.json`)}),r}function Zt(e,t){return e.replace(/<title>.*?<\/title>/,`<title>${t}</title>`)}function Qt(e,t){let n=JSON.parse(e);return n.name=t,`${JSON.stringify(n,null,2)}\n`}function $t(e,t,r,i=!1){let a=n.relative(e,t),o=i?`依赖安装完成,请执行:`:`创建完成,请执行:`;e!==t&&(o+=`\n cd ${a.includes(` `)?`"${a}"`:a}`);let s=i?zt(r,`dev`):Rt(r);return o+=`\n ${s.join(` `)}`,o}function en(e){let t=e.alias??{};return[...new Set([...e.boolean??[],...e.string??[],...Object.values(t),...Object.keys(t)])]}function tn(e,t){let n=new Set(t);return Object.keys(e).filter(e=>e!==`_`&&!n.has(e))}function nn({templateDir:e,root:r,packageName:i,renameFiles:a}){t.mkdirSync(r,{recursive:!0});let o=Xt(t.readdirSync(e),a);for(let a of o){let o=n.join(e,a.from),s=n.join(r,a.to);switch(a.kind){case`index-html`:t.writeFileSync(s,Zt(t.readFileSync(o,`utf-8`),i));break;case`package-json`:t.writeFileSync(s,Qt(t.readFileSync(o,`utf-8`),i));break;case`copy`:Lt(o,s)}}}const rn={intro:e=>He(e),outro:e=>Ue(e),write:e=>void r.stdout.write(e)};function an(e=rn){let t=!1,n=!1;return{open(r){e.intro(r),t=!0,n=!0},close(n=``){t&&(t=!1,e.outro(n))},markClosed(){t=!1},isOpen(){return t},restoreCursor(){n&&e.write(`\x1B[?25h`)}}}const on=o(import.meta.url),sn=n.dirname(on),cn=n.resolve(on,`../..`),ln=Ge(),Q=an();function $(){return Ot(),Q.markClosed(),1}async function un(e=r.argv.slice(2)){let i=r.cwd(),a=(0,ut.default)(e,structuredClone(vt)),o=a._[0]?Et(String(a._[0])):void 0,s=a.overwrite,c=a.template,l=a.immediate,u=a[`package-name`];if(a.help)return console.log(yt),0;if(a.version)return console.log(Tt(sn)),0;let d=tn(a,en(vt));if(d.length)return console.error(`未知参数:${d.map(e=>`--${e}`).join(`, `)}`),console.error(`运行 create-todo-vue --help 查看可用参数`),1;if(!Kt(u))return console.error(`无效的 package.json name:${u}`),console.error(`包名规则见 https://docs.npmjs.com/cli/configuring-npm/package-json#name`),1;Q.open(`create-todo-vue`);let f=Dt(r.env.npm_config_user_agent),p=o;if(!p){let e=await Z(qe({message:`项目名称:`,defaultValue:_t,placeholder:_t,validate(e){return!e||Et(e).length>0?void 0:`项目名称无效`}}),`项目名称`,`把项目名作为位置参数传入,如 create-todo-vue my-app`);if(P(e))return $();p=Et(e)}let m=qt(u,p,i),h=n.resolve(i,p),g=kt(h);if(g===`file`){let e=!!s;if(!e){let t=await Z(q({message:`${p} 已存在且是一个文件,请选择如何继续`,options:[{label:`取消操作`,value:`no`},{label:`删除该文件并继续`,value:`yes`}]}),`${p} 已存在且是一个文件`,`--overwrite(会删除该文件)`);if(P(t))return $();e=t===`yes`}if(!e)return $();t.rmSync(h,{force:!0})}else if(g===`dir`&&!At(h)){let e=s?`yes`:void 0;if(!e){let t=await Z(q({message:`${p===`.`?`当前目录`:`目标目录${p}`} 不为空,请选择如何继续`,options:[{label:`取消操作`,value:`no`},{label:`删除现有文件并继续`,value:`yes`},{label:`忽略文件并继续`,value:`ignore`}]}),`${p===`.`?`当前目录`:`目标目录${p}`} 不为空`,`--overwrite(会清空该目录,.git 保留)`);if(P(t))return $();e=t}switch(e){case`yes`:jt(h);break;case`no`:return $()}}let _=m.name;if(m.needsPrompt){let e=await Z(qe({message:`请输入package.json name`,defaultValue:Nt(_),placeholder:Nt(_),validate(e){if(e&&!Mt(e))return`无效的package.json name`}}),`package.json name`,`--package-name <name>`);if(P(e))return $();_=e}let{template:v,invalid:y}=Wt(c,bt),b=v;if(!b){let e=await Z(q({message:y?`${c}不是有效的模板名,请从以下选取:`:`选择模板`,options:X.map(e=>{let{color:t,name:n,display:r}=e;return{label:t(r||n),value:e}})}),`选择模板`,`-t <模板名>,可用模板见 --help`);if(P(e))return $();if(b=e.name,e.variants?.length){let t=await Z(q({message:`选择预设`,options:e.variants.map(e=>{let{name:t,customCommand:n}=e,r=n?Pt(n,f).replace(/ TARGET_DIR$/,``):void 0;return{label:Ft(e),value:t,hint:r}})}),`选择预设`,`-t <模板名>,可用模板见 --help`);if(P(t))return $();b=t}}let x=f?.name||`npm`,S=Jt(X,b);if(S){let{command:e,args:t}=Yt(Pt(S,f),p);Q.close(`转交给 ${e}`);let{status:n}=lt.default.sync(e,t,{stdio:`inherit`});return n??0}if(ln.start(`正在${h}中创建模板`),nn({templateDir:n.resolve(cn,`template-${b}`),root:h,packageName:_,renameFiles:xt}),ln.stop(`模板创建成功`),Ht(h))G.info(`目标目录已在 git 仓库中,跳过 git init`);else{let e=Ut(h);e!==0&&G.warn(`git 仓库初始化失败(git 退出码 ${e}),项目已创建`)}let C=l;if(C===void 0){let e=await Z(Be({message:`是否立即使用${x}安装依赖?`}),`是否立即安装依赖`,`-i(装)或 --no-immediate(不装)`);if(P(e))return $();C=e}if(C){let e=Vt(h,x);if(e!==0)return G.warn(`项目已创建,但依赖没装上。${x} 退出码 ${e}`),G.info($t(i,h,x)),Q.close(`依赖安装失败`),e}return G.info($t(i,h,x,C)),Q.close(`程序结束`),0}async function dn(){r.exitCode=1;try{r.exitCode=await un()}catch(e){if(e instanceof Ct){G.error(`需要交互才能继续,但输入已结束(非 TTY,或输入已读完)\n这一步在问:${e.step}\n非交互环境请改用:${e.hint}`),Ot(),Q.markClosed();return}ln.error(`创建失败`),G.error(e instanceof Error?e.message:String(e)),Q.close(`已中止`),e instanceof Error&&e.stack&&console.error(e.stack),r.exitCode=1}finally{Q.close(),Q.restoreCursor()}}export{un as main,dn as runCli};
|
package/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pnpm exec commitlint --edit "$1"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pnpm exec lint-staged
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
// Disable the default formatter, use eslint instead
|
|
3
|
+
"prettier.enable": false,
|
|
4
|
+
"editor.formatOnSave": false,
|
|
5
|
+
|
|
6
|
+
// Auto fix
|
|
7
|
+
"editor.codeActionsOnSave": {
|
|
8
|
+
"source.fixAll.eslint": "explicit",
|
|
9
|
+
"source.organizeImports": "never"
|
|
10
|
+
},
|
|
11
|
+
|
|
12
|
+
// Silent the stylistic rules in your IDE, but still auto fix them
|
|
13
|
+
"eslint.rules.customizations": [
|
|
14
|
+
{ "rule": "style/*", "severity": "off", "fixable": true },
|
|
15
|
+
{ "rule": "format/*", "severity": "off", "fixable": true },
|
|
16
|
+
{ "rule": "*-indent", "severity": "off", "fixable": true },
|
|
17
|
+
{ "rule": "*-spacing", "severity": "off", "fixable": true },
|
|
18
|
+
{ "rule": "*-spaces", "severity": "off", "fixable": true },
|
|
19
|
+
{ "rule": "*-order", "severity": "off", "fixable": true },
|
|
20
|
+
{ "rule": "*-dangle", "severity": "off", "fixable": true },
|
|
21
|
+
{ "rule": "*-newline", "severity": "off", "fixable": true },
|
|
22
|
+
{ "rule": "*quotes", "severity": "off", "fixable": true },
|
|
23
|
+
{ "rule": "*semi", "severity": "off", "fixable": true }
|
|
24
|
+
],
|
|
25
|
+
|
|
26
|
+
// Enable eslint for all supported languages
|
|
27
|
+
"eslint.validate": [
|
|
28
|
+
"javascript",
|
|
29
|
+
"javascriptreact",
|
|
30
|
+
"typescript",
|
|
31
|
+
"typescriptreact",
|
|
32
|
+
"vue",
|
|
33
|
+
"html",
|
|
34
|
+
"markdown",
|
|
35
|
+
"json",
|
|
36
|
+
"jsonc",
|
|
37
|
+
"yaml",
|
|
38
|
+
"toml",
|
|
39
|
+
"xml",
|
|
40
|
+
"gql",
|
|
41
|
+
"graphql",
|
|
42
|
+
"astro",
|
|
43
|
+
"svelte",
|
|
44
|
+
"css",
|
|
45
|
+
"less",
|
|
46
|
+
"scss",
|
|
47
|
+
"pcss",
|
|
48
|
+
"postcss"
|
|
49
|
+
]
|
|
50
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# vue-dev
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Logs
|
|
2
|
+
logs
|
|
3
|
+
*.log
|
|
4
|
+
npm-debug.log*
|
|
5
|
+
yarn-debug.log*
|
|
6
|
+
yarn-error.log*
|
|
7
|
+
pnpm-debug.log*
|
|
8
|
+
lerna-debug.log*
|
|
9
|
+
|
|
10
|
+
node_modules
|
|
11
|
+
dist
|
|
12
|
+
dist-ssr
|
|
13
|
+
*.local
|
|
14
|
+
|
|
15
|
+
# Editor directories and files
|
|
16
|
+
# .vscode/*
|
|
17
|
+
# !.vscode/extensions.json
|
|
18
|
+
.idea
|
|
19
|
+
.DS_Store
|
|
20
|
+
*.suo
|
|
21
|
+
*.ntvs*
|
|
22
|
+
*.njsproj
|
|
23
|
+
*.sln
|
|
24
|
+
*.sw?
|