liuliu_cli 1.0.2 → 1.0.4
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 +78 -13
- package/bin/index.js +2 -1
- package/dist/index.js +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
# liuliu-cli
|
|
2
2
|
|
|
3
|
-

|
|
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
|
|
16
|
+
npm install liuliu_cli -g
|
|
18
17
|
```
|
|
19
18
|
|
|
20
19
|
## 使用
|
|
21
20
|
|
|
22
21
|
```bash
|
|
23
22
|
# 使用模板创建新项目
|
|
24
|
-
|
|
23
|
+
liuliu create
|
|
25
24
|
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
# 执行项目文件夹名称并且选择模板创建新项目
|
|
26
|
+
liuliu create [projectName]
|
|
28
27
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
# 查看脚手架版本
|
|
29
|
+
liuliu -v
|
|
30
|
+
liuliu --version
|
|
32
31
|
```
|
|
33
32
|
|
|
34
|
-
##
|
|
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
|
|
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
|
-
|
|
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="[39m",a.bgColor.close="[49m",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.3","-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="[39m",a.bgColor.close="[49m",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
|
+
"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="[39m",a.bgColor.close="[49m",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.3","-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.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"build": "rollup -c rollup.config.js --bundleConfigAsCjs"
|
|
6
6
|
},
|
|
@@ -11,19 +11,19 @@
|
|
|
11
11
|
"@rollup/plugin-terser": "^0.4.4",
|
|
12
12
|
"@types/fs-extra": "^11.0.4",
|
|
13
13
|
"@types/node": "^25.0.3",
|
|
14
|
-
"commander": "^14.0.2",
|
|
15
|
-
"progress-estimator": "^0.3.1",
|
|
16
14
|
"rollup": "^4.54.0",
|
|
17
15
|
"rollup-plugin-node-externals": "^8.1.2",
|
|
18
16
|
"rollup-plugin-typescript2": "^0.36.0",
|
|
19
|
-
"simple-git": "^3.30.0",
|
|
20
17
|
"tslib": "^2.8.1",
|
|
21
18
|
"typescript": "^5.9.3"
|
|
22
19
|
},
|
|
23
20
|
"dependencies": {
|
|
24
21
|
"@inquirer/prompts": "^7.10.1",
|
|
25
22
|
"chalk": "^5.6.2",
|
|
26
|
-
"
|
|
23
|
+
"commander": "^14.0.2",
|
|
24
|
+
"fs-extra": "^11.3.3",
|
|
25
|
+
"progress-estimator": "^0.3.1",
|
|
26
|
+
"simple-git": "^3.30.0"
|
|
27
27
|
},
|
|
28
28
|
"author": "liuliu",
|
|
29
29
|
"bin": {
|