提交 4727bce4 作者: 潘亚楠

合并分支 'dev-feat/#6' 到 'dev'

从 dev-feat/#6 合并到 dev

查看合并请求 Platform/UPA/UPA_QJCLI/UPA_QJCLI!8
src
.gitlab
tsconfig.json
.gitignore
\ No newline at end of file
{
"name": "qj-vue-cli",
"version": "0.1.0",
"name": "qj-cli",
"version": "0.1.5",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
......@@ -42,6 +42,16 @@
"@types/node": "*"
}
},
"@types/inquirer": {
"version": "6.5.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/@types/inquirer/-/inquirer-6.5.0.tgz",
"integrity": "sha1-uDsL8wuIuL5yRtQOUdMv6dEOCb4=",
"dev": true,
"requires": {
"@types/through": "*",
"rxjs": "^6.4.0"
}
},
"@types/mocha": {
"version": "5.2.7",
"resolved": "http://39.106.145.141:9000/repository/node-public/@types/mocha/-/mocha-5.2.7.tgz",
......@@ -70,6 +80,15 @@
"integrity": "sha1-Jbj922MiJZxrkcNTONObD45SQlI=",
"dev": true
},
"@types/through": {
"version": "0.0.29",
"resolved": "http://39.106.145.141:9000/repository/node-public/@types/through/-/through-0.0.29.tgz",
"integrity": "sha1-cpQ6rJIuF5M5xlH6NKRCik1yL5M=",
"dev": true,
"requires": {
"@types/node": "*"
}
},
"abbrev": {
"version": "1.1.1",
"resolved": "http://39.106.145.141:9000/repository/node-public/abbrev/-/abbrev-1.1.1.tgz",
......@@ -79,14 +98,12 @@
"acorn": {
"version": "5.7.3",
"resolved": "http://39.106.145.141:9000/repository/node-public/acorn/-/acorn-5.7.3.tgz",
"integrity": "sha1-Z6ojG/iBKXS4UjWpZ3Hra9B+onk=",
"dev": true
"integrity": "sha1-Z6ojG/iBKXS4UjWpZ3Hra9B+onk="
},
"acorn-es7-plugin": {
"version": "1.1.7",
"resolved": "http://39.106.145.141:9000/repository/node-public/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz",
"integrity": "sha1-8u4fMiipDurRJF+asZIusucdM2s=",
"dev": true
"integrity": "sha1-8u4fMiipDurRJF+asZIusucdM2s="
},
"ansi-align": {
"version": "2.0.0",
......@@ -103,6 +120,14 @@
"integrity": "sha1-V9NbhoboUeLMBMQD8cACA5dqGBM=",
"dev": true
},
"ansi-escapes": {
"version": "4.3.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/ansi-escapes/-/ansi-escapes-4.3.0.tgz",
"integrity": "sha1-pM4rM9ayFLeVDYWVwhLxKsnMVp0=",
"requires": {
"type-fest": "^0.8.1"
}
},
"ansi-regex": {
"version": "3.0.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/ansi-regex/-/ansi-regex-3.0.0.tgz",
......@@ -145,8 +170,7 @@
"array-filter": {
"version": "1.0.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/array-filter/-/array-filter-1.0.0.tgz",
"integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=",
"dev": true
"integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM="
},
"balanced-match": {
"version": "1.0.0",
......@@ -222,8 +246,7 @@
"call-signature": {
"version": "0.0.2",
"resolved": "http://39.106.145.141:9000/repository/node-public/call-signature/-/call-signature-0.0.2.tgz",
"integrity": "sha1-qEq8glpV70yysCi9dOIFpluaSZY=",
"dev": true
"integrity": "sha1-qEq8glpV70yysCi9dOIFpluaSZY="
},
"camelcase": {
"version": "4.1.0",
......@@ -283,6 +306,11 @@
}
}
},
"chardet": {
"version": "0.7.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/chardet/-/chardet-0.7.0.tgz",
"integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4="
},
"chokidar": {
"version": "3.3.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/chokidar/-/chokidar-3.3.0.tgz",
......@@ -324,6 +352,11 @@
"resolved": "http://39.106.145.141:9000/repository/node-public/cli-spinners/-/cli-spinners-2.2.0.tgz",
"integrity": "sha1-6LmI2SBsaSMC2O6DTnqFwBRNj3c="
},
"cli-width": {
"version": "2.2.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/cli-width/-/cli-width-2.2.0.tgz",
"integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk="
},
"cliui": {
"version": "5.0.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/cliui/-/cliui-5.0.0.tgz",
......@@ -459,8 +492,7 @@
"core-js": {
"version": "2.6.11",
"resolved": "http://39.106.145.141:9000/repository/node-public/core-js/-/core-js-2.6.11.tgz",
"integrity": "sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw=",
"dev": true
"integrity": "sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw="
},
"create-error-class": {
"version": "3.0.2",
......@@ -536,7 +568,6 @@
"version": "1.1.3",
"resolved": "http://39.106.145.141:9000/repository/node-public/define-properties/-/define-properties-1.1.3.tgz",
"integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=",
"dev": true,
"requires": {
"object-keys": "^1.0.12"
}
......@@ -550,8 +581,7 @@
"diff-match-patch": {
"version": "1.0.4",
"resolved": "http://39.106.145.141:9000/repository/node-public/diff-match-patch/-/diff-match-patch-1.0.4.tgz",
"integrity": "sha1-asS1UjdGN2HE2vDcYD64aRJHRLE=",
"dev": true
"integrity": "sha1-asS1UjdGN2HE2vDcYD64aRJHRLE="
},
"dot-prop": {
"version": "4.2.0",
......@@ -571,8 +601,7 @@
"eastasianwidth": {
"version": "0.2.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
"integrity": "sha1-aWzi7Aqg5uqTo5f/zySqeEDIJ8s=",
"dev": true
"integrity": "sha1-aWzi7Aqg5uqTo5f/zySqeEDIJ8s="
},
"emoji-regex": {
"version": "7.0.3",
......@@ -584,7 +613,6 @@
"version": "1.3.1",
"resolved": "http://39.106.145.141:9000/repository/node-public/empower/-/empower-1.3.1.tgz",
"integrity": "sha1-dol5y7s21x2PXtqrZj3qy52rkWw=",
"dev": true,
"requires": {
"core-js": "^2.0.0",
"empower-core": "^1.2.0"
......@@ -594,7 +622,6 @@
"version": "1.2.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/empower-core/-/empower-core-1.2.0.tgz",
"integrity": "sha1-zj+ySE1Rh/opwj+6g0Swsv31YBw=",
"dev": true,
"requires": {
"call-signature": "0.0.2",
"core-js": "^2.0.0"
......@@ -662,7 +689,6 @@
"version": "1.8.1",
"resolved": "http://39.106.145.141:9000/repository/node-public/espurify/-/espurify-1.8.1.tgz",
"integrity": "sha1-V0bGwatC0wLeEL0dW/fw6MBRUFY=",
"dev": true,
"requires": {
"core-js": "^2.0.0"
}
......@@ -670,8 +696,7 @@
"estraverse": {
"version": "4.3.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/estraverse/-/estraverse-4.3.0.tgz",
"integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=",
"dev": true
"integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0="
},
"execa": {
"version": "3.4.0",
......@@ -705,6 +730,24 @@
}
}
},
"external-editor": {
"version": "3.1.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/external-editor/-/external-editor-3.1.0.tgz",
"integrity": "sha1-ywP3QL764D6k0oPK7SdBqD8zVJU=",
"requires": {
"chardet": "^0.7.0",
"iconv-lite": "^0.4.24",
"tmp": "^0.0.33"
}
},
"figures": {
"version": "3.1.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/figures/-/figures-3.1.0.tgz",
"integrity": "sha1-SxmN0H2NcVMGQoZK8tRd2eRZxOw=",
"requires": {
"escape-string-regexp": "^1.0.5"
}
},
"fill-range": {
"version": "7.0.1",
"resolved": "http://39.106.145.141:9000/repository/node-public/fill-range/-/fill-range-7.0.1.tgz",
......@@ -872,6 +915,14 @@
"resolved": "http://39.106.145.141:9000/repository/node-public/human-signals/-/human-signals-1.1.1.tgz",
"integrity": "sha1-xbHNFPUK6uCatsWf5jujOV/k36M="
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "http://39.106.145.141:9000/repository/node-public/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=",
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"ignore-by-default": {
"version": "1.0.1",
"resolved": "http://39.106.145.141:9000/repository/node-public/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
......@@ -893,8 +944,7 @@
"indexof": {
"version": "0.0.1",
"resolved": "http://39.106.145.141:9000/repository/node-public/indexof/-/indexof-0.0.1.tgz",
"integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
"dev": true
"integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
},
"inflight": {
"version": "1.0.6",
......@@ -918,6 +968,88 @@
"integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=",
"dev": true
},
"inquirer": {
"version": "7.0.1",
"resolved": "http://39.106.145.141:9000/repository/node-public/inquirer/-/inquirer-7.0.1.tgz",
"integrity": "sha1-E/eYDu3HPGif7/OZSxCcTnmcbrs=",
"requires": {
"ansi-escapes": "^4.2.1",
"chalk": "^2.4.2",
"cli-cursor": "^3.1.0",
"cli-width": "^2.0.0",
"external-editor": "^3.0.3",
"figures": "^3.0.0",
"lodash": "^4.17.15",
"mute-stream": "0.0.8",
"run-async": "^2.2.0",
"rxjs": "^6.5.3",
"string-width": "^4.1.0",
"strip-ansi": "^5.1.0",
"through": "^2.3.6"
},
"dependencies": {
"ansi-regex": {
"version": "5.0.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/ansi-regex/-/ansi-regex-5.0.0.tgz",
"integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U="
},
"chalk": {
"version": "2.4.2",
"resolved": "http://39.106.145.141:9000/repository/node-public/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
}
},
"emoji-regex": {
"version": "8.0.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc="
},
"is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0="
},
"string-width": {
"version": "4.2.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha1-lSGCxGzHssMT0VluYjmSvRY7crU=",
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.0"
},
"dependencies": {
"strip-ansi": {
"version": "6.0.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/strip-ansi/-/strip-ansi-6.0.0.tgz",
"integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=",
"requires": {
"ansi-regex": "^5.0.0"
}
}
}
},
"strip-ansi": {
"version": "5.2.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/strip-ansi/-/strip-ansi-5.2.0.tgz",
"integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
"requires": {
"ansi-regex": "^4.1.0"
},
"dependencies": {
"ansi-regex": {
"version": "4.1.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/ansi-regex/-/ansi-regex-4.1.0.tgz",
"integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc="
}
}
}
}
},
"is-arrayish": {
"version": "0.2.1",
"resolved": "http://39.106.145.141:9000/repository/node-public/is-arrayish/-/is-arrayish-0.2.1.tgz",
......@@ -1023,6 +1155,11 @@
"path-is-inside": "^1.0.1"
}
},
"is-promise": {
"version": "2.1.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/is-promise/-/is-promise-2.1.0.tgz",
"integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
},
"is-redirect": {
"version": "1.0.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/is-redirect/-/is-redirect-1.0.0.tgz",
......@@ -1110,8 +1247,7 @@
"lodash": {
"version": "4.17.15",
"resolved": "http://39.106.145.141:9000/repository/node-public/lodash/-/lodash-4.17.15.tgz",
"integrity": "sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=",
"dev": true
"integrity": "sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg="
},
"log-symbols": {
"version": "2.2.0",
......@@ -1339,8 +1475,7 @@
"object-keys": {
"version": "1.1.1",
"resolved": "http://39.106.145.141:9000/repository/node-public/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=",
"dev": true
"integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4="
},
"object.assign": {
"version": "4.1.0",
......@@ -1430,6 +1565,11 @@
}
}
},
"os-tmpdir": {
"version": "1.0.2",
"resolved": "http://39.106.145.141:9000/repository/node-public/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
},
"p-finally": {
"version": "2.0.1",
"resolved": "http://39.106.145.141:9000/repository/node-public/p-finally/-/p-finally-2.0.1.tgz",
......@@ -1526,7 +1666,6 @@
"version": "1.6.1",
"resolved": "http://39.106.145.141:9000/repository/node-public/power-assert/-/power-assert-1.6.1.tgz",
"integrity": "sha1-soy8Aq6Aiv0UMdDNUJOjmsWlsf4=",
"dev": true,
"requires": {
"define-properties": "^1.1.2",
"empower": "^1.3.1",
......@@ -1539,7 +1678,6 @@
"version": "1.2.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/power-assert-context-formatter/-/power-assert-context-formatter-1.2.0.tgz",
"integrity": "sha1-j75yaSKI7FpyA83yFci4OKYGHSo=",
"dev": true,
"requires": {
"core-js": "^2.0.0",
"power-assert-context-traversal": "^1.2.0"
......@@ -1549,7 +1687,6 @@
"version": "1.2.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/power-assert-context-reducer-ast/-/power-assert-context-reducer-ast-1.2.0.tgz",
"integrity": "sha1-x8ocnjmm+3F/esX+nnbhkr9SXfM=",
"dev": true,
"requires": {
"acorn": "^5.0.0",
"acorn-es7-plugin": "^1.0.12",
......@@ -1562,7 +1699,6 @@
"version": "1.2.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/power-assert-context-traversal/-/power-assert-context-traversal-1.2.0.tgz",
"integrity": "sha1-9ucUVLr2QN5cHJwnA0n1yasLLpQ=",
"dev": true,
"requires": {
"core-js": "^2.0.0",
"estraverse": "^4.1.0"
......@@ -1572,7 +1708,6 @@
"version": "1.4.1",
"resolved": "http://39.106.145.141:9000/repository/node-public/power-assert-formatter/-/power-assert-formatter-1.4.1.tgz",
"integrity": "sha1-XcEl7VCj37HdomwZNH879Y7CiEo=",
"dev": true,
"requires": {
"core-js": "^2.0.0",
"power-assert-context-formatter": "^1.0.7",
......@@ -1587,7 +1722,6 @@
"version": "1.2.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/power-assert-renderer-assertion/-/power-assert-renderer-assertion-1.2.0.tgz",
"integrity": "sha1-Pbb/zaEGs3vB4GQyrQ10imgrFHo=",
"dev": true,
"requires": {
"power-assert-renderer-base": "^1.1.1",
"power-assert-util-string-width": "^1.2.0"
......@@ -1596,14 +1730,12 @@
"power-assert-renderer-base": {
"version": "1.1.1",
"resolved": "http://39.106.145.141:9000/repository/node-public/power-assert-renderer-base/-/power-assert-renderer-base-1.1.1.tgz",
"integrity": "sha1-lqZQxv0F7hvB9mtUrWFELIs/Y+s=",
"dev": true
"integrity": "sha1-lqZQxv0F7hvB9mtUrWFELIs/Y+s="
},
"power-assert-renderer-comparison": {
"version": "1.2.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/power-assert-renderer-comparison/-/power-assert-renderer-comparison-1.2.0.tgz",
"integrity": "sha1-5PiBEyJaab6KpYbq0FrvmUYsBJU=",
"dev": true,
"requires": {
"core-js": "^2.0.0",
"diff-match-patch": "^1.0.0",
......@@ -1616,7 +1748,6 @@
"version": "1.2.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/power-assert-renderer-diagram/-/power-assert-renderer-diagram-1.2.0.tgz",
"integrity": "sha1-N/ZuhULlZ3xbWObXKwHA2aMOIhk=",
"dev": true,
"requires": {
"core-js": "^2.0.0",
"power-assert-renderer-base": "^1.1.1",
......@@ -1628,7 +1759,6 @@
"version": "1.2.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/power-assert-renderer-file/-/power-assert-renderer-file-1.2.0.tgz",
"integrity": "sha1-P0vr2eFFXXXPKsVB57tRWofUzks=",
"dev": true,
"requires": {
"power-assert-renderer-base": "^1.1.1"
}
......@@ -1637,7 +1767,6 @@
"version": "1.2.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/power-assert-util-string-width/-/power-assert-util-string-width-1.2.0.tgz",
"integrity": "sha1-bgbV41gbuHbF03fFMQn/+pW9kaA=",
"dev": true,
"requires": {
"eastasianwidth": "^0.2.0"
}
......@@ -1750,11 +1879,18 @@
"signal-exit": "^3.0.2"
}
},
"run-async": {
"version": "2.3.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/run-async/-/run-async-2.3.0.tgz",
"integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
"requires": {
"is-promise": "^2.1.0"
}
},
"rxjs": {
"version": "6.5.3",
"resolved": "http://39.106.145.141:9000/repository/node-public/rxjs/-/rxjs-6.5.3.tgz",
"integrity": "sha1-UQ4mMX9NuRp+sd532d2boKSJmjo=",
"dev": true,
"requires": {
"tslib": "^1.9.0"
}
......@@ -1765,6 +1901,11 @@
"integrity": "sha1-t02uxJsRSPiMZLaNSbHoFcHy9Rk=",
"dev": true
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "http://39.106.145.141:9000/repository/node-public/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo="
},
"semver": {
"version": "5.7.1",
"resolved": "http://39.106.145.141:9000/repository/node-public/semver/-/semver-5.7.1.tgz",
......@@ -1898,7 +2039,6 @@
"version": "1.4.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/stringifier/-/stringifier-1.4.0.tgz",
"integrity": "sha1-1wRYFWf0UmJl0A7Y7LNUoCw/7Cg=",
"dev": true,
"requires": {
"core-js": "^2.0.0",
"traverse": "^0.6.6",
......@@ -2012,12 +2152,25 @@
}
}
},
"through": {
"version": "2.3.8",
"resolved": "http://39.106.145.141:9000/repository/node-public/through/-/through-2.3.8.tgz",
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
},
"timed-out": {
"version": "4.0.1",
"resolved": "http://39.106.145.141:9000/repository/node-public/timed-out/-/timed-out-4.0.1.tgz",
"integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
"dev": true
},
"tmp": {
"version": "0.0.33",
"resolved": "http://39.106.145.141:9000/repository/node-public/tmp/-/tmp-0.0.33.tgz",
"integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=",
"requires": {
"os-tmpdir": "~1.0.2"
}
},
"to-regex-range": {
"version": "5.0.1",
"resolved": "http://39.106.145.141:9000/repository/node-public/to-regex-range/-/to-regex-range-5.0.1.tgz",
......@@ -2039,8 +2192,7 @@
"traverse": {
"version": "0.6.6",
"resolved": "http://39.106.145.141:9000/repository/node-public/traverse/-/traverse-0.6.6.tgz",
"integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=",
"dev": true
"integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc="
},
"tree-kill": {
"version": "1.2.2",
......@@ -2072,14 +2224,17 @@
"tslib": {
"version": "1.10.0",
"resolved": "http://39.106.145.141:9000/repository/node-public/tslib/-/tslib-1.10.0.tgz",
"integrity": "sha1-w8GflZc/sKYpc/sJ2Q2WHuQ+XIo=",
"dev": true
"integrity": "sha1-w8GflZc/sKYpc/sJ2Q2WHuQ+XIo="
},
"type-fest": {
"version": "0.8.1",
"resolved": "http://39.106.145.141:9000/repository/node-public/type-fest/-/type-fest-0.8.1.tgz",
"integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0="
},
"type-name": {
"version": "2.0.2",
"resolved": "http://39.106.145.141:9000/repository/node-public/type-name/-/type-name-2.0.2.tgz",
"integrity": "sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q=",
"dev": true
"integrity": "sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q="
},
"typescript": {
"version": "3.7.3",
......@@ -2126,7 +2281,6 @@
"version": "1.2.2",
"resolved": "http://39.106.145.141:9000/repository/node-public/universal-deep-strict-equal/-/universal-deep-strict-equal-1.2.2.tgz",
"integrity": "sha1-DaSsL3PP95JMgfpN4BjKViyisKc=",
"dev": true,
"requires": {
"array-filter": "^1.0.0",
"indexof": "0.0.1",
......@@ -2299,8 +2453,7 @@
"xtend": {
"version": "4.0.2",
"resolved": "http://39.106.145.141:9000/repository/node-public/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=",
"dev": true
"integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q="
},
"y18n": {
"version": "4.0.0",
......
{
"name": "qj-vue-cli",
"version": "0.1.0",
"name": "qj-cli",
"version": "0.1.5",
"description": "qj-vue-cli",
"main": "index.js",
"bin": {
......@@ -11,8 +11,8 @@
"watch-bin": "nodemon dist/bin/index.js create vue2.0 hello",
"dev": "concurrently \"npm run watch-ts\" \"npm run watch-bin\"",
"build": "tsc",
"dev-link": "npm run build && npm unlink && npm link",
"test": "mocha -r ts-node/register src/test/**/*.test.ts"
"test-ts": "mocha -r ts-node/register src/test/**/*.test.ts",
"test": "mocha dist/test/**/*.test.js"
},
"repository": {
"type": "git",
......@@ -29,13 +29,13 @@
"@types/commander": "^2.12.2",
"@types/cross-spawn": "^6.0.1",
"@types/fs-extra": "^8.0.1",
"@types/inquirer": "^6.5.0",
"@types/mocha": "^5.2.7",
"@types/node": "^12.12.17",
"@types/power-assert": "^1.5.2",
"concurrently": "^5.0.1",
"mocha": "^6.2.2",
"nodemon": "^2.0.2",
"power-assert": "^1.6.1",
"ts-node": "^8.5.4",
"typescript": "^3.7.3"
},
......@@ -45,6 +45,8 @@
"cross-spawn": "^7.0.1",
"execa": "^3.4.0",
"fs-extra": "^8.1.0",
"ora": "^4.0.3"
"inquirer": "^7.0.1",
"ora": "^4.0.3",
"power-assert": "^1.6.1"
}
}
......@@ -2,18 +2,18 @@
import * as program from 'commander';
import { hasTemplate } from '../config/template.config';
import listTemplates from '../lib/listTemplates';
import { create } from '../lib/create'
// 版本号
program
.version(`${require('../../package.json').version}`)
.name('world')
.name('qj-cli')
.usage('<command> [options]');
// create command
program
.command('create <templateName> <projectName>')
.description('create a project from a template')
.action((templateName: string, projectName: string, cmd) => {
console.log(templateName);
console.log(projectName);
.action((templateName: string, projectName: string, options) => {
create(templateName, projectName, options);
})
// ls command
program
......
......@@ -3,18 +3,13 @@
* @author panyanan
* @information 框架模板配置文件
*/
export interface Repo {
readonly url: string, // 仓库地址
readonly username: string, // 用户名
readonly password: string, // 用户密码
}
export interface Template {
readonly name: string, // 模板名称
readonly desc: string, // 模板描述
readonly repo: Repo, // 模板仓库信息
readonly repo: string, // 模板仓库信息
}
export const Templates: Template[] = [
{ name: 'vue2.0', desc: '千家vue2.0项目模板,对接了组件库/标准库/用户操作埋点', repo: { url: 'git@git.allhome.com.cn:panyanan/my-vue-template.git', username: '', password: ''} },
{ name: 'vue2', desc: '千家vue2项目模板,对接了组件库/标准库/用户操作埋点', repo: 'https://git.allhome.com.cn/panyanan/my-vue-template.git' },
// todo other template
];
/**
......
import { Templates, hasTemplate } from '../config/template.config'
import * as chalk from 'chalk'
import * as path from 'path'
import { CreateVue2 } from './create_vue2'
export async function create(templateName: string, projectName: string, options: any) {
// 验证模板名称
let requireMessage = [];
if (!hasTemplate(templateName)) {
requireMessage.push('模板名称不正确')
}
// 验证项目名称
if (!projectName) {
requireMessage.push('缺少项目名')
}
if (requireMessage.length) {
console.log(chalk.red(requireMessage.join(' && ')));
return;
}
// 项目目录
const targetDir = path.join(process.cwd(), projectName);
// 模板
const template = Templates.find( ({ name }) => name === templateName );
// 不同的框架模板实现各自的创建逻辑
switch(templateName) {
case 'vue2':
const creator = new CreateVue2( template, projectName, targetDir);
await creator.create(options);
default:
}
}
import * as ora from 'ora'
import { Git } from '../util/Git'
import { Templates, Template } from '../config/template.config'
import * as inquirer from 'inquirer'
import * as chalk from 'chalk';
/**
* @date 2019.12.18
* @author panyanan
* @information 创建vue2项目
*/
export class CreateVue2 {
// 模板
private template: Template;
// 项目名称
private projectName: string;
// 项目目录
private targetDir: string;
constructor(template: Template, projectName: string, targetDir: string) {
this.template = template;
this.projectName = projectName;
this.targetDir = targetDir;
}
/**
* @date 2019.12.19
* @author panyanan
* @information 创建
* @param { Object } commander中设置的option
*/
public async create(options: any): Promise<void>{
try {
let spinner = ora('create new a project');
spinner.start(`拉取${this.template.name}模板`);
// 通过仓库地址和输出目录创建git实例
const pullGit = new Git(this.template.repo, this.targetDir);
pullGit.pull();
spinner.succeed('拉取模板成功');
// 是否推送到gitLab
let answer = await inquirer.prompt([
{ name: 'push', type: 'confirm', message: '是否将项目推送到gitlab',}
]);
// 如果推送
if (answer.push) {
const { repo } = await inquirer.prompt([
{ name: 'repo', type: 'input', message: '请输入gitlab项目地址:'}
]);
const pushGit = new Git(repo, this.targetDir);
try {
spinner.start(`正在推送到gitlab: ${repo}`)
pushGit.push();
spinner.succeed('推送成功')
} catch (error) {
spinner.fail(`推送失败: ${error.message}`);
}
}
} catch (error) {
console.log(`${chalk.red('创建失败')}: ${error.message}`);
}
}
}
\ No newline at end of file
......@@ -15,9 +15,9 @@ export default function () {
const tip = `
**********************************************
当你使用create命令时如:
${chalk.blueBright('"qj-cli create vue2.0 hello"')}
中的${chalk.blueBright('"vue2.0"')}就指的是下面框架名: vue2.0,
欢迎同学们积极提供框架模板,我们还需要vue2.0_ts, vue3.0, vue3.0_ts,node服务框架等等,
${chalk.blueBright('"qj-cli create vue2 hello"')}
中的${chalk.blueBright('"vue2"')}就指的是下面框架名: vue2,
欢迎同学们积极提供框架模板,我们还需要vue2_ts, vue3, vue3_ts,node服务框架等等,
**********************************************
`;
log(`${chalk.green(tip)}`);
......
import Git from '../../util/Git'
import { Git } from '../../util/Git'
import * as assert from 'power-assert'
import * as path from 'path'
import * as spawn from 'cross-spawn'
......
......@@ -8,7 +8,7 @@ import * as assert from 'power-assert'
import * as fs from 'fs-extra'
import * as chalk from 'chalk'
import * as spawn from 'cross-spawn'
class Git {
export class Git {
private gitURL: string; // 仓库地址
private dir: string; // 拉取或推送的目录
constructor(gitURL: string, dir: string) {
......@@ -21,22 +21,19 @@ class Git {
* @author panyanan
* @information 拉取
*/
async pull(): Promise<boolean> {
let res = false;
try {
// 检测目录是否存在
const dirExits = await fs.pathExists(this.dir);
// 目录存在需要删除,才能clone
if (dirExits) {
console.log(chalk.red(`delete ${this.dir}`));
await fs.remove(this.dir);
}
await execa('git', ['clone', this.gitURL, this.dir]);
res = true;
} catch (error) {
assert.ok(false, `拉取 ${this.gitURL} 失败: ${ error.message }`);
pull(): void {
// 检测目录是否存在
const dirExits = fs.pathExistsSync(this.dir);
// 目录存在需要删除,才能clone
if (dirExits) {
console.log(`${chalk.red('\n delete ')}${this.dir}`);
fs.removeSync(this.dir);
}
return res;
// 报告者用户拉取模板
const username = 'reporter';
const password = 'allqj123456'
const gitUrl = this.gitURL.replace('https://', `https://${username}:${password}@`);
execa.sync('git', ['clone', gitUrl, this.dir]);
}
/**
* @date 2019.12.17
......@@ -49,11 +46,11 @@ class Git {
cwd: this.dir,
}
// remove origin
spawn.sync('git', ['remote', 'remove', 'origin',], options);
spawn.sync('git', ['remote', 'remove', 'origin'], options);
// set origin 为当前url
spawn.sync('git', ['remote', 'add', 'origin', this.gitURL], options);
// 推送
const { status, stderr } = spawn.sync('git', ['push', '-u', 'origin', '--all'], options);
const { status, stderr, stdout } = spawn.sync('git', ['push', '-u', 'origin', '--all'], options);
// status 为0时命令执行成功, 为1是命令执行失败
if (status === 0) {
res = true;
......@@ -91,5 +88,4 @@ class Git {
} catch (error) {}
return res;
}
}
export default Git;
\ No newline at end of file
}
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论