liuliu_cli 1.0.2 → 1.0.3

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 CHANGED
@@ -1,12 +1,11 @@
1
1
  # liuliu-cli
2
2
 
3
- ![Npm 版本](https://img.shields.io/badge/liuliu-cli_v0.0.1-green)
3
+ ![Npm 版本](https://img.shields.io/badge/liuliu-cli_v1.0.2-green)
4
4
 
5
5
  ## 简介
6
6
 
7
7
  - 用于快速搭建前端项目的命令行工具
8
8
 
9
-
10
9
  ## 模板
11
10
 
12
11
  - 快速生成vue3+TS+VITE+ElmentPlus+Pina+Axios+Mock的模板
@@ -14,27 +13,93 @@
14
13
  ## 安装
15
14
 
16
15
  ```bash
17
- npm install liulliu-cli -g
16
+ npm install liuliu_cli -g
18
17
  ```
19
18
 
20
19
  ## 使用
21
20
 
22
21
  ```bash
23
22
  # 使用模板创建新项目
24
- dawei create
23
+ liuliu create
25
24
 
26
- #执行醒目文件夹名称并且选择模板创建新项目
27
- dawei create [projectName]
25
+ # 执行项目文件夹名称并且选择模板创建新项目
26
+ liuliu create [projectName]
28
27
 
29
- #查看脚手架版本
30
- dawei -v
31
- dawei -version
28
+ # 查看脚手架版本
29
+ liuliu -v
30
+ liuliu --version
32
31
  ```
33
32
 
34
- ## npm 包
33
+ ## 开发
34
+
35
+ ### 本地开发
36
+
37
+ ```bash
38
+ # 安装依赖
39
+ npm install
40
+
41
+ # 打包
42
+ npm run build
43
+ ```
44
+
45
+ ### npm 包发布
35
46
 
36
47
  1. 让项目累加版本号
37
- 1. package.json 内 0.0.1+
38
- 2. npm version patch
48
+ 1. package.json 内版本号递增
49
+ 2. `npm version patch` (小版本,如 1.0.2 -> 1.0.3)
50
+ 2. `npm version minor` (中版本,如 1.0.2 -> 1.1.0)
51
+ 2. `npm version major` (大版本,如 1.0.2 -> 2.0.0)
39
52
  2. 发布新版本
40
- 1. npm publish
53
+ 1. `npm publish`
54
+
55
+ ## 问题排查
56
+
57
+ ### 问题:全局安装后 `liuliu -v` 无法调用
58
+
59
+ **可能的原因和解决方案:**
60
+
61
+ 1. **重新安装包**
62
+ ```bash
63
+ npm uninstall -g liuliu_cli
64
+ npm install -g liuliu_cli
65
+ ```
66
+
67
+ 2. **检查 npm 全局路径**
68
+ ```bash
69
+ # 查看 npm 全局安装路径
70
+ npm config get prefix
71
+
72
+ # 确保该路径在系统 PATH 环境变量中
73
+ # Windows: 通常是 C:\Users\你的用户名\AppData\Roaming\npm
74
+ ```
75
+
76
+ 3. **检查 bin 文件是否存在**
77
+ ```bash
78
+ # 查看全局安装的 bin 文件
79
+ npm list -g liuliu_cli
80
+
81
+ # 或者直接检查文件
82
+ # Windows: C:\Users\你的用户名\AppData\Roaming\npm\liuliu.cmd
83
+ # 或: C:\Users\你的用户名\AppData\Roaming\npm\node_modules\liuliu_cli\bin\index.js
84
+ ```
85
+
86
+ 4. **清除 npm 缓存**
87
+ ```bash
88
+ npm cache clean --force
89
+ ```
90
+
91
+ 5. **检查文件权限(Windows)**
92
+ - 确保 bin/index.js 文件有执行权限
93
+ - 如果使用 Git,确保文件没有被 Git 修改换行符(CRLF vs LF)
94
+
95
+ 6. **验证打包文件**
96
+ ```bash
97
+ # 在项目目录下
98
+ npm run build
99
+ node bin/index.js -v # 应该能正常输出版本号
100
+ ```
101
+
102
+ 如果以上方法都无法解决,请检查:
103
+ - package.json 中的 `bin` 配置是否正确指向 `bin/index.js`
104
+ - `bin/index.js` 文件第一行是否有正确的 shebang: `#!/usr/bin/env node`
105
+ - `files` 字段是否包含 `bin` 目录
package/bin/index.js CHANGED
@@ -1 +1,2 @@
1
- "use strict";var e=require("commander"),o=require("path"),r=require("fs-extra"),t=require("@inquirer/prompts"),n=require("simple-git"),l=require("progress-estimator");const s=(e=0)=>o=>`[${o+e}m`,i=(e=0)=>o=>`[${38+e};5;${o}m`,c=(e=0)=>(o,r,t)=>`[${38+e};2;${o};${r};${t}m`,a={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(a.modifier);Object.keys(a.color),Object.keys(a.bgColor);const g=function(){const e=new Map;for(const[o,r]of Object.entries(a)){for(const[o,t]of Object.entries(r))a[o]={open:`[${t[0]}m`,close:`[${t[1]}m`},r[o]=a[o],e.set(t[0],t[1]);Object.defineProperty(a,o,{value:r,enumerable:!1})}return Object.defineProperty(a,"codes",{value:e,enumerable:!1}),a.color.close="",a.bgColor.close="",a.color.ansi=s(),a.color.ansi256=i(),a.color.ansi16m=c(),a.bgColor.ansi=s(10),a.bgColor.ansi256=i(10),a.bgColor.ansi16m=c(10),Object.defineProperties(a,{rgbToAnsi256:{value:(e,o,r)=>e===o&&o===r?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(o/255*5)+Math.round(r/255*5),enumerable:!1},hexToRgb:{value(e){const o=/[a-f\d]{6}|[a-f\d]{3}/i.exec(e.toString(16));if(!o)return[0,0,0];let[r]=o;3===r.length&&(r=[...r].map(e=>e+e).join(""));const t=Number.parseInt(r,16);return[t>>16&255,t>>8&255,255&t]},enumerable:!1},hexToAnsi256:{value:e=>a.rgbToAnsi256(...a.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value(e){if(e<8)return 30+e;if(e<16)return e-8+90;let o,r,t;if(e>=232)o=(10*(e-232)+8)/255,r=o,t=o;else{const n=(e-=16)%36;o=Math.floor(e/36)/5,r=Math.floor(n/6)/5,t=n%6/5}const n=2*Math.max(o,r,t);if(0===n)return 30;let l=30+(Math.round(t)<<2|Math.round(r)<<1|Math.round(o));return 2===n&&(l+=60),l},enumerable:!1},rgbToAnsi:{value:(e,o,r)=>a.ansi256ToAnsi(a.rgbToAnsi256(e,o,r)),enumerable:!1},hexToAnsi:{value:e=>a.ansi256ToAnsi(a.hexToAnsi256(e)),enumerable:!1}}),a}(),u=(()=>{if(!("navigator"in globalThis))return 0;if(globalThis.navigator.userAgentData){const e=navigator.userAgentData.brands.find(({brand:e})=>"Chromium"===e);if(e&&e.version>93)return 3}return/\b(Chrome|Chromium)\//.test(globalThis.navigator.userAgent)?1:0})(),b=0!==u&&{level:u},h={stdout:b,stderr:b};function m(e,o,r){let t=e.indexOf(o);if(-1===t)return e;const n=o.length;let l=0,s="";do{s+=e.slice(l,t)+o+r,l=t+n,t=e.indexOf(o,l)}while(-1!==t);return s+=e.slice(l),s}const{stdout:d,stderr:p}=h,v=Symbol("GENERATOR"),f=Symbol("STYLER"),y=Symbol("IS_EMPTY"),O=["ansi","ansi","ansi256","ansi16m"],w=Object.create(null),C=e=>{const o=(...e)=>e.join(" ");return((e,o={})=>{if(o.level&&!(Number.isInteger(o.level)&&o.level>=0&&o.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");const r=d?d.level:0;e.level=void 0===o.level?r:o.level})(o,e),Object.setPrototypeOf(o,T.prototype),o};function T(e){return C(e)}Object.setPrototypeOf(T.prototype,Function.prototype);for(const[e,o]of Object.entries(g))w[e]={get(){const r=x(this,j(o.open,o.close,this[f]),this[y]);return Object.defineProperty(this,e,{value:r}),r}};w.visible={get(){const e=x(this,this[f],!0);return Object.defineProperty(this,"visible",{value:e}),e}};const A=(e,o,r,...t)=>"rgb"===e?"ansi16m"===o?g[r].ansi16m(...t):"ansi256"===o?g[r].ansi256(g.rgbToAnsi256(...t)):g[r].ansi(g.rgbToAnsi(...t)):"hex"===e?A("rgb",o,r,...g.hexToRgb(...t)):g[r][e](...t),B=["rgb","hex","ansi256"];for(const e of B){w[e]={get(){const{level:o}=this;return function(...r){const t=j(A(e,O[o],"color",...r),g.color.close,this[f]);return x(this,t,this[y])}}};w["bg"+e[0].toUpperCase()+e.slice(1)]={get(){const{level:o}=this;return function(...r){const t=j(A(e,O[o],"bgColor",...r),g.bgColor.close,this[f]);return x(this,t,this[y])}}}}const R=Object.defineProperties(()=>{},{...w,level:{enumerable:!0,get(){return this[v].level},set(e){this[v].level=e}}}),j=(e,o,r)=>{let t,n;return void 0===r?(t=e,n=o):(t=r.openAll+e,n=o+r.closeAll),{open:e,close:o,openAll:t,closeAll:n,parent:r}},x=(e,o,r)=>{const t=(...e)=>k(t,1===e.length?""+e[0]:e.join(" "));return Object.setPrototypeOf(t,R),t[v]=e,t[f]=o,t[y]=r,t},k=(e,o)=>{if(e.level<=0||!o)return e[y]?"":o;let r=e[f];if(void 0===r)return o;const{openAll:t,closeAll:n}=r;if(o.includes(""))for(;void 0!==r;)o=m(o,r.close,r.open),r=r.parent;const l=o.indexOf("\n");return-1!==l&&(o=function(e,o,r,t){let n=0,l="";do{const s="\r"===e[t-1];l+=e.slice(n,s?t-1:t)+o+(s?"\r\n":"\n")+r,n=t+1,t=e.indexOf("\n",n)}while(-1!==t);return l+=e.slice(n),l}(o,n,t,l)),t+o+n};Object.defineProperties(T.prototype,w);const M=T();T({level:p?p.level:0}),process.env.FORCE_COLOR||(process.env.FORCE_COLOR="1"),M.level=3;const S=l({spinner:{interval:100,frames:["-","+","-"].map(e=>M.green(e))}});process.cwd();process.env.FORCE_COLOR||(process.env.FORCE_COLOR="1"),M.level=3;const P=new Map([["Vite-Vue3-Typescript-template",{name:"Vite-Vue-Type",downloadUrl:"https://gitee.com/sohucw/admin-pro.git",description:"Vue3技术开发模板1",branch:"dev11"}],["Vite-Vue3-Typescript-template2",{name:"Vite-Vue-Type",downloadUrl:"git@gitee.com:sohucw/admin-pro.git",description:"Vue3技术开发模板2",branch:"dev10"}]]);async function E(e){const l=Array.from(P).map(e=>{const[o,r]=e;return{name:o,value:o,description:r.description}});e||(e=await t.input({message:"请输入项目名称"}));const s=o.resolve(process.cwd(),e);if(r.existsSync(s)){if(!await(i=e,console.warn(`${i}文件夹存在`),t.select({message:"是否覆盖?",choices:[{name:"覆盖",value:!0},{name:"取消",value:!1}]})))return;await r.remove(s)}var i;const c=await t.select({message:"请选择模板",choices:l}),a=P.get(c);if(a)try{await(async(e,o,r)=>{const t=n();try{await S(t.clone(e,o,r),"代码下载中",{estimate:7e3}),console.log(),console.log(M.green("代码下载成功")),console.log(M.blackBright("========================")),console.log(M.blackBright("==欢迎使用 DALIU脚手架===")),console.log(M.blackBright("========================")),console.log(),console.log(),console.log(M.blackBright("====使用npm install安装依赖========="))}catch(e){throw console.error(M.red("下载失败")),e?.message?.includes("Host key verification failed")?(console.error(M.yellow("\n提示:SSH 主机密钥验证失败")),console.error(M.yellow("解决方案:")),console.error(M.yellow("1. 如果使用 SSH URL,请先配置 SSH 密钥:")),console.error(M.yellow(' ssh-keygen -t rsa -C "your_email@example.com"')),console.error(M.yellow(" 然后将公钥添加到 Git 服务器")),console.error(M.yellow("2. 或者使用 HTTPS URL(需要输入用户名密码)")),console.error(M.yellow("3. 临时解决:手动添加主机密钥")),console.error(M.yellow(" ssh-keyscan gitee.com >> ~/.ssh/known_hosts"))):e?.message?.includes("Could not read from remote repository")?(console.error(M.yellow("\n提示:无法访问远程仓库")),console.error(M.yellow("请检查:")),console.error(M.yellow("1. 仓库地址是否正确")),console.error(M.yellow("2. 是否有访问权限")),console.error(M.yellow("3. 网络连接是否正常"))):(console.error(M.red("\n错误详情:")),console.error(e)),e}})(a.downloadUrl,e,["-b",a.branch])}catch(e){process.exit(1)}else console.error(M.red("未找到模板信息")),process.exit(1)}process.env.FORCE_COLOR||(process.env.FORCE_COLOR="1"),M.level=3;const L=new e.Command("liuliu");L.version("1.0.1","-v,--version"),L.command("create").description("创建一个新项目").argument("[name]","项目名称").action(async e=>{E(e)}),L.parse(),exports.add=function(e,o){return e+o};
1
+ #!/usr/bin/env node
2
+ "use strict";var e=require("commander"),o=require("path"),r=require("fs-extra"),t=require("@inquirer/prompts"),n=require("simple-git"),l=require("progress-estimator");const s=(e=0)=>o=>`[${o+e}m`,i=(e=0)=>o=>`[${38+e};5;${o}m`,c=(e=0)=>(o,r,t)=>`[${38+e};2;${o};${r};${t}m`,a={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(a.modifier);Object.keys(a.color),Object.keys(a.bgColor);const g=function(){const e=new Map;for(const[o,r]of Object.entries(a)){for(const[o,t]of Object.entries(r))a[o]={open:`[${t[0]}m`,close:`[${t[1]}m`},r[o]=a[o],e.set(t[0],t[1]);Object.defineProperty(a,o,{value:r,enumerable:!1})}return Object.defineProperty(a,"codes",{value:e,enumerable:!1}),a.color.close="",a.bgColor.close="",a.color.ansi=s(),a.color.ansi256=i(),a.color.ansi16m=c(),a.bgColor.ansi=s(10),a.bgColor.ansi256=i(10),a.bgColor.ansi16m=c(10),Object.defineProperties(a,{rgbToAnsi256:{value:(e,o,r)=>e===o&&o===r?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(o/255*5)+Math.round(r/255*5),enumerable:!1},hexToRgb:{value(e){const o=/[a-f\d]{6}|[a-f\d]{3}/i.exec(e.toString(16));if(!o)return[0,0,0];let[r]=o;3===r.length&&(r=[...r].map(e=>e+e).join(""));const t=Number.parseInt(r,16);return[t>>16&255,t>>8&255,255&t]},enumerable:!1},hexToAnsi256:{value:e=>a.rgbToAnsi256(...a.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value(e){if(e<8)return 30+e;if(e<16)return e-8+90;let o,r,t;if(e>=232)o=(10*(e-232)+8)/255,r=o,t=o;else{const n=(e-=16)%36;o=Math.floor(e/36)/5,r=Math.floor(n/6)/5,t=n%6/5}const n=2*Math.max(o,r,t);if(0===n)return 30;let l=30+(Math.round(t)<<2|Math.round(r)<<1|Math.round(o));return 2===n&&(l+=60),l},enumerable:!1},rgbToAnsi:{value:(e,o,r)=>a.ansi256ToAnsi(a.rgbToAnsi256(e,o,r)),enumerable:!1},hexToAnsi:{value:e=>a.ansi256ToAnsi(a.hexToAnsi256(e)),enumerable:!1}}),a}(),u=(()=>{if(!("navigator"in globalThis))return 0;if(globalThis.navigator.userAgentData){const e=navigator.userAgentData.brands.find(({brand:e})=>"Chromium"===e);if(e&&e.version>93)return 3}return/\b(Chrome|Chromium)\//.test(globalThis.navigator.userAgent)?1:0})(),b=0!==u&&{level:u},h={stdout:b,stderr:b};function m(e,o,r){let t=e.indexOf(o);if(-1===t)return e;const n=o.length;let l=0,s="";do{s+=e.slice(l,t)+o+r,l=t+n,t=e.indexOf(o,l)}while(-1!==t);return s+=e.slice(l),s}const{stdout:d,stderr:p}=h,v=Symbol("GENERATOR"),f=Symbol("STYLER"),y=Symbol("IS_EMPTY"),O=["ansi","ansi","ansi256","ansi16m"],w=Object.create(null),C=e=>{const o=(...e)=>e.join(" ");return((e,o={})=>{if(o.level&&!(Number.isInteger(o.level)&&o.level>=0&&o.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");const r=d?d.level:0;e.level=void 0===o.level?r:o.level})(o,e),Object.setPrototypeOf(o,T.prototype),o};function T(e){return C(e)}Object.setPrototypeOf(T.prototype,Function.prototype);for(const[e,o]of Object.entries(g))w[e]={get(){const r=x(this,j(o.open,o.close,this[f]),this[y]);return Object.defineProperty(this,e,{value:r}),r}};w.visible={get(){const e=x(this,this[f],!0);return Object.defineProperty(this,"visible",{value:e}),e}};const A=(e,o,r,...t)=>"rgb"===e?"ansi16m"===o?g[r].ansi16m(...t):"ansi256"===o?g[r].ansi256(g.rgbToAnsi256(...t)):g[r].ansi(g.rgbToAnsi(...t)):"hex"===e?A("rgb",o,r,...g.hexToRgb(...t)):g[r][e](...t),B=["rgb","hex","ansi256"];for(const e of B){w[e]={get(){const{level:o}=this;return function(...r){const t=j(A(e,O[o],"color",...r),g.color.close,this[f]);return x(this,t,this[y])}}};w["bg"+e[0].toUpperCase()+e.slice(1)]={get(){const{level:o}=this;return function(...r){const t=j(A(e,O[o],"bgColor",...r),g.bgColor.close,this[f]);return x(this,t,this[y])}}}}const R=Object.defineProperties(()=>{},{...w,level:{enumerable:!0,get(){return this[v].level},set(e){this[v].level=e}}}),j=(e,o,r)=>{let t,n;return void 0===r?(t=e,n=o):(t=r.openAll+e,n=o+r.closeAll),{open:e,close:o,openAll:t,closeAll:n,parent:r}},x=(e,o,r)=>{const t=(...e)=>k(t,1===e.length?""+e[0]:e.join(" "));return Object.setPrototypeOf(t,R),t[v]=e,t[f]=o,t[y]=r,t},k=(e,o)=>{if(e.level<=0||!o)return e[y]?"":o;let r=e[f];if(void 0===r)return o;const{openAll:t,closeAll:n}=r;if(o.includes(""))for(;void 0!==r;)o=m(o,r.close,r.open),r=r.parent;const l=o.indexOf("\n");return-1!==l&&(o=function(e,o,r,t){let n=0,l="";do{const s="\r"===e[t-1];l+=e.slice(n,s?t-1:t)+o+(s?"\r\n":"\n")+r,n=t+1,t=e.indexOf("\n",n)}while(-1!==t);return l+=e.slice(n),l}(o,n,t,l)),t+o+n};Object.defineProperties(T.prototype,w);const M=T();T({level:p?p.level:0}),process.env.FORCE_COLOR||(process.env.FORCE_COLOR="1"),M.level=3;const S=l({spinner:{interval:100,frames:["-","+","-"].map(e=>M.green(e))}});process.cwd();process.env.FORCE_COLOR||(process.env.FORCE_COLOR="1"),M.level=3;const P=new Map([["Vite-Vue3-Typescript-template",{name:"Vite-Vue-Type",downloadUrl:"https://gitee.com/sohucw/admin-pro.git",description:"Vue3技术开发模板1",branch:"dev11"}],["Vite-Vue3-Typescript-template2",{name:"Vite-Vue-Type",downloadUrl:"git@gitee.com:sohucw/admin-pro.git",description:"Vue3技术开发模板2",branch:"dev10"}]]);async function E(e){const l=Array.from(P).map(e=>{const[o,r]=e;return{name:o,value:o,description:r.description}});e||(e=await t.input({message:"请输入项目名称"}));const s=o.resolve(process.cwd(),e);if(r.existsSync(s)){if(!await(i=e,console.warn(`${i}文件夹存在`),t.select({message:"是否覆盖?",choices:[{name:"覆盖",value:!0},{name:"取消",value:!1}]})))return;await r.remove(s)}var i;const c=await t.select({message:"请选择模板",choices:l}),a=P.get(c);if(a)try{await(async(e,o,r)=>{const t=n();try{await S(t.clone(e,o,r),"代码下载中",{estimate:7e3}),console.log(),console.log(M.green("代码下载成功")),console.log(M.blackBright("========================")),console.log(M.blackBright("==欢迎使用 DALIU脚手架===")),console.log(M.blackBright("========================")),console.log(),console.log(),console.log(M.blackBright("====使用npm install安装依赖========="))}catch(e){throw console.error(M.red("下载失败")),e?.message?.includes("Host key verification failed")?(console.error(M.yellow("\n提示:SSH 主机密钥验证失败")),console.error(M.yellow("解决方案:")),console.error(M.yellow("1. 如果使用 SSH URL,请先配置 SSH 密钥:")),console.error(M.yellow(' ssh-keygen -t rsa -C "your_email@example.com"')),console.error(M.yellow(" 然后将公钥添加到 Git 服务器")),console.error(M.yellow("2. 或者使用 HTTPS URL(需要输入用户名密码)")),console.error(M.yellow("3. 临时解决:手动添加主机密钥")),console.error(M.yellow(" ssh-keyscan gitee.com >> ~/.ssh/known_hosts"))):e?.message?.includes("Could not read from remote repository")?(console.error(M.yellow("\n提示:无法访问远程仓库")),console.error(M.yellow("请检查:")),console.error(M.yellow("1. 仓库地址是否正确")),console.error(M.yellow("2. 是否有访问权限")),console.error(M.yellow("3. 网络连接是否正常"))):(console.error(M.red("\n错误详情:")),console.error(e)),e}})(a.downloadUrl,e,["-b",a.branch])}catch(e){process.exit(1)}else console.error(M.red("未找到模板信息")),process.exit(1)}process.env.FORCE_COLOR||(process.env.FORCE_COLOR="1"),M.level=3;const L=new e.Command("liuliu");L.version("1.0.2","-v,--version"),L.command("create").description("创建一个新项目").argument("[name]","项目名称").action(async e=>{E(e)}),L.parse(),exports.add=function(e,o){return e+o};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("commander"),o=require("path"),r=require("fs-extra"),t=require("@inquirer/prompts"),n=require("simple-git"),l=require("progress-estimator");const s=(e=0)=>o=>`[${o+e}m`,i=(e=0)=>o=>`[${38+e};5;${o}m`,c=(e=0)=>(o,r,t)=>`[${38+e};2;${o};${r};${t}m`,a={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(a.modifier);Object.keys(a.color),Object.keys(a.bgColor);const g=function(){const e=new Map;for(const[o,r]of Object.entries(a)){for(const[o,t]of Object.entries(r))a[o]={open:`[${t[0]}m`,close:`[${t[1]}m`},r[o]=a[o],e.set(t[0],t[1]);Object.defineProperty(a,o,{value:r,enumerable:!1})}return Object.defineProperty(a,"codes",{value:e,enumerable:!1}),a.color.close="",a.bgColor.close="",a.color.ansi=s(),a.color.ansi256=i(),a.color.ansi16m=c(),a.bgColor.ansi=s(10),a.bgColor.ansi256=i(10),a.bgColor.ansi16m=c(10),Object.defineProperties(a,{rgbToAnsi256:{value:(e,o,r)=>e===o&&o===r?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(o/255*5)+Math.round(r/255*5),enumerable:!1},hexToRgb:{value(e){const o=/[a-f\d]{6}|[a-f\d]{3}/i.exec(e.toString(16));if(!o)return[0,0,0];let[r]=o;3===r.length&&(r=[...r].map(e=>e+e).join(""));const t=Number.parseInt(r,16);return[t>>16&255,t>>8&255,255&t]},enumerable:!1},hexToAnsi256:{value:e=>a.rgbToAnsi256(...a.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value(e){if(e<8)return 30+e;if(e<16)return e-8+90;let o,r,t;if(e>=232)o=(10*(e-232)+8)/255,r=o,t=o;else{const n=(e-=16)%36;o=Math.floor(e/36)/5,r=Math.floor(n/6)/5,t=n%6/5}const n=2*Math.max(o,r,t);if(0===n)return 30;let l=30+(Math.round(t)<<2|Math.round(r)<<1|Math.round(o));return 2===n&&(l+=60),l},enumerable:!1},rgbToAnsi:{value:(e,o,r)=>a.ansi256ToAnsi(a.rgbToAnsi256(e,o,r)),enumerable:!1},hexToAnsi:{value:e=>a.ansi256ToAnsi(a.hexToAnsi256(e)),enumerable:!1}}),a}(),u=(()=>{if(!("navigator"in globalThis))return 0;if(globalThis.navigator.userAgentData){const e=navigator.userAgentData.brands.find(({brand:e})=>"Chromium"===e);if(e&&e.version>93)return 3}return/\b(Chrome|Chromium)\//.test(globalThis.navigator.userAgent)?1:0})(),b=0!==u&&{level:u},h={stdout:b,stderr:b};function m(e,o,r){let t=e.indexOf(o);if(-1===t)return e;const n=o.length;let l=0,s="";do{s+=e.slice(l,t)+o+r,l=t+n,t=e.indexOf(o,l)}while(-1!==t);return s+=e.slice(l),s}const{stdout:d,stderr:p}=h,v=Symbol("GENERATOR"),f=Symbol("STYLER"),y=Symbol("IS_EMPTY"),O=["ansi","ansi","ansi256","ansi16m"],w=Object.create(null),C=e=>{const o=(...e)=>e.join(" ");return((e,o={})=>{if(o.level&&!(Number.isInteger(o.level)&&o.level>=0&&o.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");const r=d?d.level:0;e.level=void 0===o.level?r:o.level})(o,e),Object.setPrototypeOf(o,T.prototype),o};function T(e){return C(e)}Object.setPrototypeOf(T.prototype,Function.prototype);for(const[e,o]of Object.entries(g))w[e]={get(){const r=x(this,j(o.open,o.close,this[f]),this[y]);return Object.defineProperty(this,e,{value:r}),r}};w.visible={get(){const e=x(this,this[f],!0);return Object.defineProperty(this,"visible",{value:e}),e}};const A=(e,o,r,...t)=>"rgb"===e?"ansi16m"===o?g[r].ansi16m(...t):"ansi256"===o?g[r].ansi256(g.rgbToAnsi256(...t)):g[r].ansi(g.rgbToAnsi(...t)):"hex"===e?A("rgb",o,r,...g.hexToRgb(...t)):g[r][e](...t),B=["rgb","hex","ansi256"];for(const e of B){w[e]={get(){const{level:o}=this;return function(...r){const t=j(A(e,O[o],"color",...r),g.color.close,this[f]);return x(this,t,this[y])}}};w["bg"+e[0].toUpperCase()+e.slice(1)]={get(){const{level:o}=this;return function(...r){const t=j(A(e,O[o],"bgColor",...r),g.bgColor.close,this[f]);return x(this,t,this[y])}}}}const R=Object.defineProperties(()=>{},{...w,level:{enumerable:!0,get(){return this[v].level},set(e){this[v].level=e}}}),j=(e,o,r)=>{let t,n;return void 0===r?(t=e,n=o):(t=r.openAll+e,n=o+r.closeAll),{open:e,close:o,openAll:t,closeAll:n,parent:r}},x=(e,o,r)=>{const t=(...e)=>k(t,1===e.length?""+e[0]:e.join(" "));return Object.setPrototypeOf(t,R),t[v]=e,t[f]=o,t[y]=r,t},k=(e,o)=>{if(e.level<=0||!o)return e[y]?"":o;let r=e[f];if(void 0===r)return o;const{openAll:t,closeAll:n}=r;if(o.includes(""))for(;void 0!==r;)o=m(o,r.close,r.open),r=r.parent;const l=o.indexOf("\n");return-1!==l&&(o=function(e,o,r,t){let n=0,l="";do{const s="\r"===e[t-1];l+=e.slice(n,s?t-1:t)+o+(s?"\r\n":"\n")+r,n=t+1,t=e.indexOf("\n",n)}while(-1!==t);return l+=e.slice(n),l}(o,n,t,l)),t+o+n};Object.defineProperties(T.prototype,w);const M=T();T({level:p?p.level:0}),process.env.FORCE_COLOR||(process.env.FORCE_COLOR="1"),M.level=3;const S=l({spinner:{interval:100,frames:["-","+","-"].map(e=>M.green(e))}});process.cwd();process.env.FORCE_COLOR||(process.env.FORCE_COLOR="1"),M.level=3;const P=new Map([["Vite-Vue3-Typescript-template",{name:"Vite-Vue-Type",downloadUrl:"https://gitee.com/sohucw/admin-pro.git",description:"Vue3技术开发模板1",branch:"dev11"}],["Vite-Vue3-Typescript-template2",{name:"Vite-Vue-Type",downloadUrl:"git@gitee.com:sohucw/admin-pro.git",description:"Vue3技术开发模板2",branch:"dev10"}]]);async function E(e){const l=Array.from(P).map(e=>{const[o,r]=e;return{name:o,value:o,description:r.description}});e||(e=await t.input({message:"请输入项目名称"}));const s=o.resolve(process.cwd(),e);if(r.existsSync(s)){if(!await(i=e,console.warn(`${i}文件夹存在`),t.select({message:"是否覆盖?",choices:[{name:"覆盖",value:!0},{name:"取消",value:!1}]})))return;await r.remove(s)}var i;const c=await t.select({message:"请选择模板",choices:l}),a=P.get(c);if(a)try{await(async(e,o,r)=>{const t=n();try{await S(t.clone(e,o,r),"代码下载中",{estimate:7e3}),console.log(),console.log(M.green("代码下载成功")),console.log(M.blackBright("========================")),console.log(M.blackBright("==欢迎使用 DALIU脚手架===")),console.log(M.blackBright("========================")),console.log(),console.log(),console.log(M.blackBright("====使用npm install安装依赖========="))}catch(e){throw console.error(M.red("下载失败")),e?.message?.includes("Host key verification failed")?(console.error(M.yellow("\n提示:SSH 主机密钥验证失败")),console.error(M.yellow("解决方案:")),console.error(M.yellow("1. 如果使用 SSH URL,请先配置 SSH 密钥:")),console.error(M.yellow(' ssh-keygen -t rsa -C "your_email@example.com"')),console.error(M.yellow(" 然后将公钥添加到 Git 服务器")),console.error(M.yellow("2. 或者使用 HTTPS URL(需要输入用户名密码)")),console.error(M.yellow("3. 临时解决:手动添加主机密钥")),console.error(M.yellow(" ssh-keyscan gitee.com >> ~/.ssh/known_hosts"))):e?.message?.includes("Could not read from remote repository")?(console.error(M.yellow("\n提示:无法访问远程仓库")),console.error(M.yellow("请检查:")),console.error(M.yellow("1. 仓库地址是否正确")),console.error(M.yellow("2. 是否有访问权限")),console.error(M.yellow("3. 网络连接是否正常"))):(console.error(M.red("\n错误详情:")),console.error(e)),e}})(a.downloadUrl,e,["-b",a.branch])}catch(e){process.exit(1)}else console.error(M.red("未找到模板信息")),process.exit(1)}process.env.FORCE_COLOR||(process.env.FORCE_COLOR="1"),M.level=3;const L=new e.Command("liuliu");L.version("1.0.1","-v,--version"),L.command("create").description("创建一个新项目").argument("[name]","项目名称").action(async e=>{E(e)}),L.parse(),exports.add=function(e,o){return e+o};
1
+ "use strict";var e=require("commander"),o=require("path"),r=require("fs-extra"),t=require("@inquirer/prompts"),n=require("simple-git"),l=require("progress-estimator");const s=(e=0)=>o=>`[${o+e}m`,i=(e=0)=>o=>`[${38+e};5;${o}m`,c=(e=0)=>(o,r,t)=>`[${38+e};2;${o};${r};${t}m`,a={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(a.modifier);Object.keys(a.color),Object.keys(a.bgColor);const g=function(){const e=new Map;for(const[o,r]of Object.entries(a)){for(const[o,t]of Object.entries(r))a[o]={open:`[${t[0]}m`,close:`[${t[1]}m`},r[o]=a[o],e.set(t[0],t[1]);Object.defineProperty(a,o,{value:r,enumerable:!1})}return Object.defineProperty(a,"codes",{value:e,enumerable:!1}),a.color.close="",a.bgColor.close="",a.color.ansi=s(),a.color.ansi256=i(),a.color.ansi16m=c(),a.bgColor.ansi=s(10),a.bgColor.ansi256=i(10),a.bgColor.ansi16m=c(10),Object.defineProperties(a,{rgbToAnsi256:{value:(e,o,r)=>e===o&&o===r?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(o/255*5)+Math.round(r/255*5),enumerable:!1},hexToRgb:{value(e){const o=/[a-f\d]{6}|[a-f\d]{3}/i.exec(e.toString(16));if(!o)return[0,0,0];let[r]=o;3===r.length&&(r=[...r].map(e=>e+e).join(""));const t=Number.parseInt(r,16);return[t>>16&255,t>>8&255,255&t]},enumerable:!1},hexToAnsi256:{value:e=>a.rgbToAnsi256(...a.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value(e){if(e<8)return 30+e;if(e<16)return e-8+90;let o,r,t;if(e>=232)o=(10*(e-232)+8)/255,r=o,t=o;else{const n=(e-=16)%36;o=Math.floor(e/36)/5,r=Math.floor(n/6)/5,t=n%6/5}const n=2*Math.max(o,r,t);if(0===n)return 30;let l=30+(Math.round(t)<<2|Math.round(r)<<1|Math.round(o));return 2===n&&(l+=60),l},enumerable:!1},rgbToAnsi:{value:(e,o,r)=>a.ansi256ToAnsi(a.rgbToAnsi256(e,o,r)),enumerable:!1},hexToAnsi:{value:e=>a.ansi256ToAnsi(a.hexToAnsi256(e)),enumerable:!1}}),a}(),u=(()=>{if(!("navigator"in globalThis))return 0;if(globalThis.navigator.userAgentData){const e=navigator.userAgentData.brands.find(({brand:e})=>"Chromium"===e);if(e&&e.version>93)return 3}return/\b(Chrome|Chromium)\//.test(globalThis.navigator.userAgent)?1:0})(),b=0!==u&&{level:u},h={stdout:b,stderr:b};function m(e,o,r){let t=e.indexOf(o);if(-1===t)return e;const n=o.length;let l=0,s="";do{s+=e.slice(l,t)+o+r,l=t+n,t=e.indexOf(o,l)}while(-1!==t);return s+=e.slice(l),s}const{stdout:d,stderr:p}=h,v=Symbol("GENERATOR"),f=Symbol("STYLER"),y=Symbol("IS_EMPTY"),O=["ansi","ansi","ansi256","ansi16m"],w=Object.create(null),C=e=>{const o=(...e)=>e.join(" ");return((e,o={})=>{if(o.level&&!(Number.isInteger(o.level)&&o.level>=0&&o.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");const r=d?d.level:0;e.level=void 0===o.level?r:o.level})(o,e),Object.setPrototypeOf(o,T.prototype),o};function T(e){return C(e)}Object.setPrototypeOf(T.prototype,Function.prototype);for(const[e,o]of Object.entries(g))w[e]={get(){const r=x(this,j(o.open,o.close,this[f]),this[y]);return Object.defineProperty(this,e,{value:r}),r}};w.visible={get(){const e=x(this,this[f],!0);return Object.defineProperty(this,"visible",{value:e}),e}};const A=(e,o,r,...t)=>"rgb"===e?"ansi16m"===o?g[r].ansi16m(...t):"ansi256"===o?g[r].ansi256(g.rgbToAnsi256(...t)):g[r].ansi(g.rgbToAnsi(...t)):"hex"===e?A("rgb",o,r,...g.hexToRgb(...t)):g[r][e](...t),B=["rgb","hex","ansi256"];for(const e of B){w[e]={get(){const{level:o}=this;return function(...r){const t=j(A(e,O[o],"color",...r),g.color.close,this[f]);return x(this,t,this[y])}}};w["bg"+e[0].toUpperCase()+e.slice(1)]={get(){const{level:o}=this;return function(...r){const t=j(A(e,O[o],"bgColor",...r),g.bgColor.close,this[f]);return x(this,t,this[y])}}}}const R=Object.defineProperties(()=>{},{...w,level:{enumerable:!0,get(){return this[v].level},set(e){this[v].level=e}}}),j=(e,o,r)=>{let t,n;return void 0===r?(t=e,n=o):(t=r.openAll+e,n=o+r.closeAll),{open:e,close:o,openAll:t,closeAll:n,parent:r}},x=(e,o,r)=>{const t=(...e)=>k(t,1===e.length?""+e[0]:e.join(" "));return Object.setPrototypeOf(t,R),t[v]=e,t[f]=o,t[y]=r,t},k=(e,o)=>{if(e.level<=0||!o)return e[y]?"":o;let r=e[f];if(void 0===r)return o;const{openAll:t,closeAll:n}=r;if(o.includes(""))for(;void 0!==r;)o=m(o,r.close,r.open),r=r.parent;const l=o.indexOf("\n");return-1!==l&&(o=function(e,o,r,t){let n=0,l="";do{const s="\r"===e[t-1];l+=e.slice(n,s?t-1:t)+o+(s?"\r\n":"\n")+r,n=t+1,t=e.indexOf("\n",n)}while(-1!==t);return l+=e.slice(n),l}(o,n,t,l)),t+o+n};Object.defineProperties(T.prototype,w);const M=T();T({level:p?p.level:0}),process.env.FORCE_COLOR||(process.env.FORCE_COLOR="1"),M.level=3;const S=l({spinner:{interval:100,frames:["-","+","-"].map(e=>M.green(e))}});process.cwd();process.env.FORCE_COLOR||(process.env.FORCE_COLOR="1"),M.level=3;const P=new Map([["Vite-Vue3-Typescript-template",{name:"Vite-Vue-Type",downloadUrl:"https://gitee.com/sohucw/admin-pro.git",description:"Vue3技术开发模板1",branch:"dev11"}],["Vite-Vue3-Typescript-template2",{name:"Vite-Vue-Type",downloadUrl:"git@gitee.com:sohucw/admin-pro.git",description:"Vue3技术开发模板2",branch:"dev10"}]]);async function E(e){const l=Array.from(P).map(e=>{const[o,r]=e;return{name:o,value:o,description:r.description}});e||(e=await t.input({message:"请输入项目名称"}));const s=o.resolve(process.cwd(),e);if(r.existsSync(s)){if(!await(i=e,console.warn(`${i}文件夹存在`),t.select({message:"是否覆盖?",choices:[{name:"覆盖",value:!0},{name:"取消",value:!1}]})))return;await r.remove(s)}var i;const c=await t.select({message:"请选择模板",choices:l}),a=P.get(c);if(a)try{await(async(e,o,r)=>{const t=n();try{await S(t.clone(e,o,r),"代码下载中",{estimate:7e3}),console.log(),console.log(M.green("代码下载成功")),console.log(M.blackBright("========================")),console.log(M.blackBright("==欢迎使用 DALIU脚手架===")),console.log(M.blackBright("========================")),console.log(),console.log(),console.log(M.blackBright("====使用npm install安装依赖========="))}catch(e){throw console.error(M.red("下载失败")),e?.message?.includes("Host key verification failed")?(console.error(M.yellow("\n提示:SSH 主机密钥验证失败")),console.error(M.yellow("解决方案:")),console.error(M.yellow("1. 如果使用 SSH URL,请先配置 SSH 密钥:")),console.error(M.yellow(' ssh-keygen -t rsa -C "your_email@example.com"')),console.error(M.yellow(" 然后将公钥添加到 Git 服务器")),console.error(M.yellow("2. 或者使用 HTTPS URL(需要输入用户名密码)")),console.error(M.yellow("3. 临时解决:手动添加主机密钥")),console.error(M.yellow(" ssh-keyscan gitee.com >> ~/.ssh/known_hosts"))):e?.message?.includes("Could not read from remote repository")?(console.error(M.yellow("\n提示:无法访问远程仓库")),console.error(M.yellow("请检查:")),console.error(M.yellow("1. 仓库地址是否正确")),console.error(M.yellow("2. 是否有访问权限")),console.error(M.yellow("3. 网络连接是否正常"))):(console.error(M.red("\n错误详情:")),console.error(e)),e}})(a.downloadUrl,e,["-b",a.branch])}catch(e){process.exit(1)}else console.error(M.red("未找到模板信息")),process.exit(1)}process.env.FORCE_COLOR||(process.env.FORCE_COLOR="1"),M.level=3;const L=new e.Command("liuliu");L.version("1.0.2","-v,--version"),L.command("create").description("创建一个新项目").argument("[name]","项目名称").action(async e=>{E(e)}),L.parse(),exports.add=function(e,o){return e+o};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "liuliu_cli",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "scripts": {
5
5
  "build": "rollup -c rollup.config.js --bundleConfigAsCjs"
6
6
  },