diff --git a/README.MD b/README.MD index 76f1508..205fc45 100644 --- a/README.MD +++ b/README.MD @@ -35,6 +35,7 @@ Commands: * [x] 增删查模板列表 * [x] 克隆项目到本地 +* [x] 克隆时ejs模板变量渲染 * [x] 代码整理 * [x] 同步功能 diff --git a/dist/pp.cjs.js b/dist/pp.cjs.js index f316ec6..426923d 100644 --- a/dist/pp.cjs.js +++ b/dist/pp.cjs.js @@ -150,6 +150,15 @@ var Data = (function () { var data = this.getData(); return data[name]; }; + Data.prototype.modifyUrl = function (name, opts) { + var data = this.findOne(name); + Object.keys(opts).forEach(function (v) { + if (opts[v] != undefined) { + data[v] = opts[v]; + } + }); + this.sync(); + }; Data.prototype.addUrl = function (opts) { var data = this.getData(); if (!data[opts.name]) { @@ -229,6 +238,7 @@ function isExist(file) { } return result; } +var exclude = ['.png', '.jpg', '.jpeg', '.zip', '.rar', '.webp']; function writefile(fromDir, toDir, opts, force) { if (opts === void 0) { opts = {}; } if (force === void 0) { force = false; } @@ -254,8 +264,14 @@ function writefile(fromDir, toDir, opts, force) { encoding: "utf8", }); try { - var html = ejs__default["default"].render(originRoot, opts); - fs__default["default"].writeFileSync(toRes, html); + var ext = path__default["default"].parse(fromRes).ext; + if (exclude.includes(ext)) { + fs__default["default"].copyFileSync(fromRes, toRes); + } + else { + var html = ejs__default["default"].render(originRoot, opts); + fs__default["default"].writeFileSync(toRes, html); + } } catch (e) { errorFile.push(toRes); @@ -542,7 +558,21 @@ function onCopy(templateDir, opts) { console.log(chalk__default["default"].red("安全起见,不覆写已存在的目录,请先删除相同目录文件夹")); return; } - writefile(templateDir, opts.targetDir); + var vars = {}; + if (opts.p) { + try { + opts.p.split(',').forEach(function (v) { + var temp = v.split(":"); + if (temp[0] != undefined && temp[1] != undefined) { + vars[temp[0]] = temp[1]; + } + }); + } + catch (e) { + console.log(chalk__default["default"].red("您存储的变量解析出错了,请先检查")); + } + } + writefile(templateDir, opts.targetDir, vars); } function onClone(name, target) { var item = Data.getInstance().findOne(name); @@ -557,6 +587,20 @@ function onClone(name, target) { console.log(chalk__default["default"].red("安全起见,不覆写已存在的目录,请先删除相同目录文件夹")); return; } + var opts = {}; + if (item.p) { + try { + item.p.split(',').forEach(function (v) { + var temp = v.split(":"); + if (temp[0] != undefined && temp[1] != undefined) { + opts[temp[0]] = temp[1]; + } + }); + } + catch (e) { + console.log(chalk__default["default"].red("您存储的变量解析出错了,请先检查")); + } + } download__default["default"](git_url, tempPath, { clone: true }, function (err) { if (err) throw err; @@ -577,6 +621,16 @@ function onRemove(name) { console.error(chalk__default["default"].red("不存在该模板")); } } +function onModify(name, opt) { + var http = /^(http|https)\:\/\//g; + var git = /(git|root)\@/g; + if (opt.url && !git.test(opt.url) && !http.test(opt.url)) { + console.error(chalk__default["default"].red("请添加正确的Git仓库地址")); + return; + } + Data.getInstance().modifyUrl(name, opt); + console.log(chalk__default["default"].green("修改成功")); +} function onAdd(url, name, opt) { var http = /^(http|https)\:\/\//g; var git = /(git|root)\@/g; @@ -605,13 +659,25 @@ program .command("add <url> <name>") .option("-d --desc <desc>", "模板具体描述") .option("-t --tag <tag>", "模板标签") + .option("-v --var <var>", "模板变量") .description("添加一个模板仓库") .action(onAdd); program + .command("m <name>") + .option("-d --desc <desc>", "模板具体描述") + .option("-t --tag <tag>", "模板标签") + .option("-u --url <url>", "仓库地址") + .option("-p --p <p>", "模板变量") + .description("修改模板仓库") + .action(onModify); +program .command("remove <name>") .description("删除一个模板仓库") .action(onRemove); program.command("clone <name> <target>").description("克隆模板仓库").action(onClone); -program.command("copy <templateDir>").requiredOption("-d --targetDir <targetDir>", "目标路径").description("简单文件夹克隆").action(onCopy); +program.command("copy <templateDir>") + .requiredOption("-d --targetDir <targetDir>", "目标路径") + .option("-p --p <p>", "模板变量") + .description("简单文件夹克隆").action(onCopy); program.parse(process.argv); //# sourceMappingURL=pp.cjs.js.map diff --git a/dist/pp.cjs.js.map b/dist/pp.cjs.js.map index 8bfd527..17da7eb 100644 --- a/dist/pp.cjs.js.map +++ b/dist/pp.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"pp.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file +{"version":3,"file":"pp.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/package.json b/package.json index f264fe2..2cdd816 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@noderun/pp", - "version": "0.0.3", + "version": "0.0.4", "description": "命令行管理模板项目", "main": "dist/pp.umd.js", "module": "dist/pp.esm.js", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eb81f65..391da45 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,12 +35,16 @@ specifiers: uuid: ^8.3.2 dependencies: + chalk: registry.nlark.com/chalk/4.1.2 commander: registry.npmmirror.com/commander/8.3.0 download-git-repo: 3.0.2 ejs: 3.1.6 + fs-extra: registry.nlark.com/fs-extra/9.1.0 ini: 2.0.0 node-fetch: registry.npmmirror.com/node-fetch/2.6.6 + ora: registry.nlark.com/ora/5.4.1 qs: 6.10.1 + tslib: registry.nlark.com/tslib/2.3.1 uuid: 8.3.2 devDependencies: @@ -56,18 +60,14 @@ devDependencies: '@types/node-fetch': registry.nlark.com/@types/node-fetch/2.5.12 '@types/qs': 6.9.7 '@types/uuid': 8.3.1 - chalk: registry.nlark.com/chalk/4.1.2 cross-env: registry.nlark.com/cross-env/7.0.3 dts-bundle: registry.npmmirror.com/dts-bundle/0.7.3 execa: registry.nlark.com/execa/4.1.0 - fs-extra: registry.nlark.com/fs-extra/9.1.0 inquirer: registry.npmmirror.com/inquirer/8.2.0 lodash: registry.nlark.com/lodash/4.17.21 - ora: registry.nlark.com/ora/5.4.1 rollup: registry.npmmirror.com/rollup/2.59.0 rollup-plugin-sourcemaps: registry.npmmirror.com/rollup-plugin-sourcemaps/0.6.3_0f119b75fee2067b54923714521665fe rollup-plugin-typescript2: registry.nlark.com/rollup-plugin-typescript2/0.27.3_rollup@2.59.0+typescript@4.4.4 - tslib: registry.nlark.com/tslib/2.3.1 typescript: registry.npmmirror.com/typescript/4.4.4 packages: @@ -185,7 +185,6 @@ packages: engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - dev: true /color-name/1.1.3: resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} @@ -193,7 +192,6 @@ packages: /color-name/1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true /commander/2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -492,7 +490,6 @@ packages: /has-flag/4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - dev: true /has-symbol-support-x/1.4.2: resolution: {integrity: sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==} @@ -1004,7 +1001,6 @@ packages: name: ansi-regex version: 5.0.1 engines: {node: '>=8'} - dev: true registry.nlark.com/ansi-styles/4.3.0: resolution: {integrity: sha1-7dgDYornHATIWuegkG7a00tkiTc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz} @@ -1013,7 +1009,6 @@ packages: engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - dev: true registry.nlark.com/asynckit/0.4.0: resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/asynckit/download/asynckit-0.4.0.tgz} @@ -1026,7 +1021,7 @@ packages: name: at-least-node version: 1.0.0 engines: {node: '>= 4.0.0'} - dev: true + dev: false registry.nlark.com/atob/2.1.2: resolution: {integrity: sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/atob/download/atob-2.1.2.tgz} @@ -1058,7 +1053,6 @@ packages: buffer: registry.nlark.com/buffer/5.7.1 inherits: registry.nlark.com/inherits/2.0.4 readable-stream: registry.nlark.com/readable-stream/3.6.0 - dev: true registry.nlark.com/buffer/5.7.1: resolution: {integrity: sha1-umLnwTEzBTWCGXFghRqPZI6Z7tA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/buffer/download/buffer-5.7.1.tgz} @@ -1094,7 +1088,6 @@ packages: dependencies: ansi-styles: registry.nlark.com/ansi-styles/4.3.0 supports-color: registry.nlark.com/supports-color/7.2.0 - dev: true registry.nlark.com/cli-cursor/3.1.0: resolution: {integrity: sha1-JkMFp65JDR0Dvwybp8kl0XU68wc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/cli-cursor/download/cli-cursor-3.1.0.tgz} @@ -1103,7 +1096,6 @@ packages: engines: {node: '>=8'} dependencies: restore-cursor: registry.nlark.com/restore-cursor/3.1.0 - dev: true registry.nlark.com/cli-width/3.0.0: resolution: {integrity: sha1-ovSEN6LKqaIkNueUvwceyeYc7fY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/cli-width/download/cli-width-3.0.0.tgz} @@ -1117,7 +1109,6 @@ packages: name: clone version: 1.0.4 engines: {node: '>=0.8'} - dev: true registry.nlark.com/combined-stream/1.0.8: resolution: {integrity: sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/combined-stream/download/combined-stream-1.0.8.tgz} @@ -1175,7 +1166,6 @@ packages: version: 1.0.3 dependencies: clone: registry.nlark.com/clone/1.0.4 - dev: true registry.nlark.com/delayed-stream/1.0.0: resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/delayed-stream/download/delayed-stream-1.0.0.tgz} @@ -1302,7 +1292,7 @@ packages: graceful-fs: registry.npmmirror.com/graceful-fs/4.2.8 jsonfile: registry.nlark.com/jsonfile/6.1.0 universalify: registry.nlark.com/universalify/2.0.0 - dev: true + dev: false registry.nlark.com/fs.realpath/1.0.0: resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/fs.realpath/download/fs.realpath-1.0.0.tgz} @@ -1373,7 +1363,6 @@ packages: name: is-interactive version: 1.0.0 engines: {node: '>=8'} - dev: true registry.nlark.com/is-module/1.0.0: resolution: {integrity: sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-module/download/is-module-1.0.0.tgz} @@ -1401,7 +1390,6 @@ packages: name: is-unicode-supported version: 0.1.0 engines: {node: '>=10'} - dev: true registry.nlark.com/isexe/2.0.0: resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/isexe/download/isexe-2.0.0.tgz} @@ -1425,7 +1413,7 @@ packages: universalify: registry.nlark.com/universalify/2.0.0 optionalDependencies: graceful-fs: registry.npmmirror.com/graceful-fs/4.2.8 - dev: true + dev: false registry.nlark.com/locate-path/5.0.0: resolution: {integrity: sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/locate-path/download/locate-path-5.0.0.tgz} @@ -1450,7 +1438,6 @@ packages: dependencies: chalk: registry.nlark.com/chalk/4.1.2 is-unicode-supported: registry.nlark.com/is-unicode-supported/0.1.0 - dev: true registry.nlark.com/magic-string/0.25.7: resolution: {integrity: sha1-P0l9b9NMZpxnmNy4IfLvMfVEUFE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/magic-string/download/magic-string-0.25.7.tgz} @@ -1480,7 +1467,6 @@ packages: name: mimic-fn version: 2.1.0 engines: {node: '>=6'} - dev: true registry.nlark.com/minimist/0.1.0: resolution: {integrity: sha1-md9lelJXTCHJBXSX33QnkLK0wN4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/minimist/download/minimist-0.1.0.tgz} @@ -1515,7 +1501,6 @@ packages: engines: {node: '>=6'} dependencies: mimic-fn: registry.nlark.com/mimic-fn/2.1.0 - dev: true registry.nlark.com/ora/5.4.1: resolution: {integrity: sha1-GyZ4Qmr0rEpQkAjl5KyemVnbnhg=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/ora/download/ora-5.4.1.tgz} @@ -1532,7 +1517,6 @@ packages: log-symbols: registry.nlark.com/log-symbols/4.1.0 strip-ansi: registry.npmmirror.com/strip-ansi/6.0.1 wcwidth: registry.nlark.com/wcwidth/1.0.1 - dev: true registry.nlark.com/os-tmpdir/1.0.2: resolution: {integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/os-tmpdir/download/os-tmpdir-1.0.2.tgz} @@ -1625,7 +1609,6 @@ packages: inherits: registry.nlark.com/inherits/2.0.4 string_decoder: registry.nlark.com/string_decoder/1.1.1 util-deprecate: registry.nlark.com/util-deprecate/1.0.2 - dev: true registry.nlark.com/resolve/1.17.0: resolution: {integrity: sha1-sllBtUloIxzC0bt2p5y38sC/hEQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/resolve/download/resolve-1.17.0.tgz?cache=0&sync_timestamp=1631501917799&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fresolve%2Fdownload%2Fresolve-1.17.0.tgz} @@ -1652,7 +1635,6 @@ packages: dependencies: onetime: registry.nlark.com/onetime/5.1.2 signal-exit: registry.npmmirror.com/signal-exit/3.0.5 - dev: true registry.nlark.com/rollup-plugin-typescript2/0.27.3_rollup@2.59.0+typescript@4.4.4: resolution: {integrity: sha1-zZRVrAJtMlsgxXKNLMVKCKdxtos=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/rollup-plugin-typescript2/download/rollup-plugin-typescript2-0.27.3.tgz} @@ -1683,7 +1665,6 @@ packages: resolution: {integrity: sha1-mR7GnSluAxN0fVm9/St0XDX4go0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/safe-buffer/download/safe-buffer-5.1.2.tgz} name: safe-buffer version: 5.1.2 - dev: true registry.nlark.com/safer-buffer/2.1.2: resolution: {integrity: sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/safer-buffer/download/safer-buffer-2.1.2.tgz} @@ -1742,7 +1723,6 @@ packages: version: 1.1.1 dependencies: safe-buffer: registry.nlark.com/safe-buffer/5.1.2 - dev: true registry.nlark.com/strip-final-newline/2.0.0: resolution: {integrity: sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/strip-final-newline/download/strip-final-newline-2.0.0.tgz} @@ -1758,7 +1738,6 @@ packages: engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - dev: true registry.nlark.com/through/2.3.8: resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/through/download/through-2.3.8.tgz} @@ -1791,7 +1770,7 @@ packages: resolution: {integrity: sha1-6KM1rdXOrlGqJh0ypJAVjvBC7wE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/tslib/download/tslib-2.3.1.tgz} name: tslib version: 2.3.1 - dev: true + dev: false registry.nlark.com/universalify/0.1.2: resolution: {integrity: sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/universalify/download/universalify-0.1.2.tgz} @@ -1805,13 +1784,12 @@ packages: name: universalify version: 2.0.0 engines: {node: '>= 10.0.0'} - dev: true + dev: false registry.nlark.com/util-deprecate/1.0.2: resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/util-deprecate/download/util-deprecate-1.0.2.tgz} name: util-deprecate version: 1.0.2 - dev: true registry.nlark.com/wcwidth/1.0.1: resolution: {integrity: sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/wcwidth/download/wcwidth-1.0.1.tgz} @@ -1819,7 +1797,6 @@ packages: version: 1.0.1 dependencies: defaults: registry.nlark.com/defaults/1.0.3 - dev: true registry.nlark.com/webidl-conversions/3.0.1: resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/webidl-conversions/download/webidl-conversions-3.0.1.tgz} @@ -1948,7 +1925,6 @@ packages: name: cli-spinners version: 2.6.1 engines: {node: '>=6'} - dev: true registry.npmmirror.com/commander/2.20.3: resolution: {integrity: sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1634887824095&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz} @@ -2165,7 +2141,6 @@ packages: resolution: {integrity: sha1-nj6MwMdamUcrRDIQM6dwLnc4JS8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/signal-exit/download/signal-exit-3.0.5.tgz} name: signal-exit version: 3.0.5 - dev: true registry.npmmirror.com/string-width/4.2.3: resolution: {integrity: sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/string-width/download/string-width-4.2.3.tgz} @@ -2185,7 +2160,6 @@ packages: engines: {node: '>=8'} dependencies: ansi-regex: registry.nlark.com/ansi-regex/5.0.1 - dev: true registry.npmmirror.com/tr46/0.0.3: resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tr46/download/tr46-0.0.3.tgz} diff --git a/src/data/data.ts b/src/data/data.ts index 697ded7..f080b68 100644 --- a/src/data/data.ts +++ b/src/data/data.ts @@ -6,7 +6,7 @@ import config from "@/config"; import {readIniFile, writeIniFile} from "@/util"; const dataPath = config.listPath - +type a = keyof { url?: string, desc?:string, p?: string, tag?: string} /** * 读取配置 */ @@ -47,6 +47,16 @@ export default class Data { return data[name] } + modifyUrl(name: string, opts: { url?: string, desc?:string, p?: string, tag?: string}){ + let data = this.findOne(name); + (Object.keys(opts) as a[]).forEach((v:a)=>{ + if(opts[v]!=undefined){ + data[v] = opts[v] + } + }) + this.sync() + } + addUrl(opts: { url: string, name: string, desc?:string, force?: boolean}){ let data = this.getData() if(!data[opts.name]){ diff --git a/src/func.ts b/src/func.ts index dc4c80e..9354718 100644 --- a/src/func.ts +++ b/src/func.ts @@ -70,7 +70,7 @@ export function onList(opt?: { all?: boolean, tag:string }) { }); } -export function onCopy(templateDir: string, opts: { targetDir: string }){ +export function onCopy(templateDir: string, opts: { targetDir: string, p:string }){ if(!isExist(templateDir)){ console.log( chalk.red("请提供模板目录") @@ -83,7 +83,23 @@ export function onCopy(templateDir: string, opts: { targetDir: string }){ ); return; } - writefile(templateDir, opts.targetDir); + let vars = {} + if(opts.p){ + try{ + opts.p.split(',').forEach((v:string)=>{ + let temp = v.split(":") + if (temp[0]!=undefined&&temp[1]!=undefined){ + // @ts-ignore + vars[temp[0]] = temp[1] + } + }) + }catch (e) { + console.log( + chalk.red("您存储的变量解析出错了,请先检查") + ); + } + } + writefile(templateDir, opts.targetDir, vars); } export function onClone(name: string, target: string) { @@ -101,6 +117,22 @@ export function onClone(name: string, target: string) { ); return; } + let opts = {} + if(item.p){ + try{ + item.p.split(',').forEach((v:string)=>{ + let temp = v.split(":") + if (temp[0]!=undefined&&temp[1]!=undefined){ + // @ts-ignore + opts[temp[0]] = temp[1] + } + }) + }catch (e) { + console.log( + chalk.red("您存储的变量解析出错了,请先检查") + ); + } + } download(git_url, tempPath, { clone: true }, function (err: Error) { if (err) throw err; console.log("临时文件夹为:" + tempPath); @@ -121,7 +153,18 @@ export function onRemove(name: string) { } } -export function onAdd(url: string, name: string, opt: { desc?: string,tag?:string }) { +export function onModify(name: string, opt: { desc?: string, url?:string,tag?:string,p?:string }) { + const http = /^(http|https)\:\/\//g; + const git = /(git|root)\@/g; + if (opt.url&&!git.test(opt.url) && !http.test(opt.url)) { + console.error(chalk.red("请添加正确的Git仓库地址")); + return; + } + Data.getInstance().modifyUrl(name, opt); + console.log(chalk.green("修改成功")); +} + +export function onAdd(url: string, name: string, opt: { desc?: string,tag?:string,var?:string }) { const http = /^(http|https)\:\/\//g; const git = /(git|root)\@/g; if (!git.test(url) && !http.test(url)) { diff --git a/src/index.ts b/src/index.ts index 90cff13..bfeb4bd 100644 --- a/src/index.ts +++ b/src/index.ts @@ -24,15 +24,26 @@ program .command("add <url> <name>") .option("-d --desc <desc>", "模板具体描述") .option("-t --tag <tag>", "模板标签") + .option("-v --var <var>", "模板变量") .description("添加一个模板仓库") .action(func.onAdd); - +program + .command("m <name>") + .option("-d --desc <desc>", "模板具体描述") + .option("-t --tag <tag>", "模板标签") + .option("-u --url <url>", "仓库地址") + .option("-p --p <p>", "模板变量") + .description("修改模板仓库") + .action(func.onModify); program .command("remove <name>") .description("删除一个模板仓库") .action(func.onRemove); program.command("clone <name> <target>").description("克隆模板仓库").action(func.onClone); -program.command("copy <templateDir>").requiredOption("-d --targetDir <targetDir>", "目标路径").description("简单文件夹克隆").action(func.onCopy); +program.command("copy <templateDir>") + .requiredOption("-d --targetDir <targetDir>", "目标路径") + .option("-p --p <p>", "模板变量") + .description("简单文件夹克隆").action(func.onCopy); program.parse(process.argv); diff --git a/src/writefile.ts b/src/writefile.ts index ba126c7..f2759e4 100644 --- a/src/writefile.ts +++ b/src/writefile.ts @@ -31,6 +31,8 @@ export function isExist (file: string) { return result } +const exclude = ['.png','.jpg','.jpeg','.zip','.rar','.webp'] + export default function writefile (fromDir: string, toDir: string, opts = {}, force = false) { if (!fromDir) { console.log(chalk.red("缺少模板目录")) @@ -54,8 +56,13 @@ export default function writefile (fromDir: string, toDir: string, opts = {}, fo encoding: "utf8", }); try{ - const html = ejs.render(originRoot, opts); - fs.writeFileSync(toRes, html); + let ext = path.parse(fromRes).ext + if(exclude.includes(ext)){ + fs.copyFileSync(fromRes, toRes) + }else { + const html = ejs.render(originRoot, opts); + fs.writeFileSync(toRes, html); + } }catch (e) { errorFile.push(toRes) errors.push(e)