guoxiaoxiao8 5 years ago
parent
commit
98df8a1c31
3 changed files with 178 additions and 52 deletions
  1. 125 0
      jd/createComponentMode.js
  2. 51 51
      package-lock.json
  3. 2 1
      package.json

+ 125 - 0
jd/createComponentMode.js

@@ -0,0 +1,125 @@
+// 创建模板
+
+const inquirer = require('inquirer');
+// import {  ROOT_PACKAGE_PATH } from '../util/dic';
+//const conf = require(ROOT_PACKAGE_PATH('src/config.json'));
+import { nav } from '../src/config.ts';
+// const path = require('path');
+// const fs = require('fs');
+// const copy = require('copy');
+//const createPkgDeclare = require('./createPkgDeclare');
+// const t = require('@babel/types');
+// const { parse } = require('@babel/parser');
+// const { default: traverse } = require('@babel/traverse');
+// const { default: generate } = require('@babel/generator');
+
+var newCpt = {
+  version: '1.0.0',
+  name: '',
+  type: '',
+  chnName: '',
+  desc: '',
+  sort: '',
+  showDemo: true,
+  author: '',
+  star: undefined
+};
+function init() {
+  inquirer
+    .prompt([
+      {
+        type: 'input',
+        name: 'name',
+        message: '组件英文名(每个单词的首字母都大写,如TextBox):',
+        validate(value: any) {
+          let repeat = false;
+          for (var i = 0; i < nav.length; i++) {
+            for (var j = 0; j < nav[i].packages.length; j++) {
+              if (nav[i].packages[j].name === value) {
+                repeat = true;
+              }
+            }
+          }
+
+          if (repeat) {
+            return '该组件名已存在!';
+          }
+          const pass = value && value.match(/^[A-Z]/);
+          if (pass) {
+            return true;
+          }
+          return '不能为空,且每个单词的首字母都要大写,如TextBox';
+        }
+      },
+      {
+        type: 'input',
+        name: 'chnName',
+        message: '组件中文名(十个字以内):',
+        validate(value: any) {
+          const pass = value && value.length <= 10;
+          if (pass) {
+            return true;
+          }
+          return '不能为空,且不能超过十个字符';
+        }
+      },
+      {
+        type: 'input',
+        name: 'desc',
+        message: '组件描述(五十个字以内):'
+      },
+      {
+        type: 'rawlist',
+        name: 'type',
+        message: '请选择组件类型(输入编号):',
+        choices: ['component', 'filter', 'directive', 'method'],
+        validate(value: any) {
+          const pass = value && /^[1-4]$/.test(value);
+          if (pass) {
+            return true;
+          }
+          return '输入有误!请输入选项前编号';
+        }
+      },
+      {
+        type: 'rawlist',
+        name: 'sort',
+        message: '请选择组件分类(输入编号):',
+        choices: sorts,
+        validate(value: any) {
+          const pass = /^[1-7]$/.test(value);
+          if (pass) {
+            return true;
+          }
+          return '输入有误!请输入选项前编号';
+        }
+      },
+      {
+        type: 'confirm',
+        name: 'showDemo',
+        message: '是否需要DEMO页面?',
+        default: true
+      },
+      {
+        type: 'confirm',
+        name: 'showTest',
+        message: '是否需要单元测试页面?',
+        default: true
+      },
+      {
+        type: 'input',
+        name: 'author',
+        message: '组件作者(可署化名):'
+      }
+    ])
+    .then(function(answers: any) {
+      // answers.sort = String(sorts.indexOf(answers.sort));
+      // newCpt = Object.assign(newCpt, answers);
+      console.log(answers);
+      //createDir();
+    });
+}
+
+export default async function createComponent() {
+  init();
+}

+ 51 - 51
package-lock.json

@@ -2038,6 +2038,54 @@
         "tslint": "^5.20.1",
         "tslint": "^5.20.1",
         "webpack": "^4.0.0",
         "webpack": "^4.0.0",
         "yorkie": "^2.0.0"
         "yorkie": "^2.0.0"
+      },
+      "dependencies": {
+        "cosmiconfig": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
+          "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "@types/parse-json": "^4.0.0",
+            "import-fresh": "^3.1.0",
+            "parse-json": "^5.0.0",
+            "path-type": "^4.0.0",
+            "yaml": "^1.7.2"
+          }
+        },
+        "fork-ts-checker-webpack-plugin-v5": {
+          "version": "npm:fork-ts-checker-webpack-plugin@5.2.1",
+          "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.2.1.tgz",
+          "integrity": "sha512-SVi+ZAQOGbtAsUWrZvGzz38ga2YqjWvca1pXQFUArIVXqli0lLoDQ8uS0wg0kSpcwpZmaW5jVCZXQebkyUQSsw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "@babel/code-frame": "^7.8.3",
+            "@types/json-schema": "^7.0.5",
+            "chalk": "^4.1.0",
+            "cosmiconfig": "^6.0.0",
+            "deepmerge": "^4.2.2",
+            "fs-extra": "^9.0.0",
+            "memfs": "^3.1.2",
+            "minimatch": "^3.0.4",
+            "schema-utils": "2.7.0",
+            "semver": "^7.3.2",
+            "tapable": "^1.0.0"
+          }
+        },
+        "schema-utils": {
+          "version": "2.7.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
+          "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "@types/json-schema": "^7.0.4",
+            "ajv": "^6.12.2",
+            "ajv-keywords": "^3.4.1"
+          }
+        }
       }
       }
     },
     },
     "@vue/cli-plugin-vuex": {
     "@vue/cli-plugin-vuex": {
@@ -2292,9 +2340,9 @@
           }
           }
         },
         },
         "vue-loader-v16": {
         "vue-loader-v16": {
-          "version": "npm:vue-loader@16.0.0-beta.10",
-          "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-beta.10.tgz",
-          "integrity": "sha512-PflGsj4RHW3tuYFmSPhcozAkds8ELXf8d19twWorQTjcuWxl/Xqb9W1NgfsY7AAkCkkRRYy2FwIX4tSnskfKig==",
+          "version": "npm:vue-loader@16.0.0-rc.0",
+          "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-rc.0.tgz",
+          "integrity": "sha512-S4F7jhBQFuJbLtyjfrMYl4gBFhMACHtkZ+rJuH6/hvgxeAEAPBY5aVKn1+LuVE9+U1RGGQ9Nq/7DSR72spf0PQ==",
           "dev": true,
           "dev": true,
           "optional": true,
           "optional": true,
           "requires": {
           "requires": {
@@ -6668,54 +6716,6 @@
         }
         }
       }
       }
     },
     },
-    "fork-ts-checker-webpack-plugin-v5": {
-      "version": "npm:fork-ts-checker-webpack-plugin@5.2.1",
-      "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.2.1.tgz",
-      "integrity": "sha512-SVi+ZAQOGbtAsUWrZvGzz38ga2YqjWvca1pXQFUArIVXqli0lLoDQ8uS0wg0kSpcwpZmaW5jVCZXQebkyUQSsw==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "@babel/code-frame": "^7.8.3",
-        "@types/json-schema": "^7.0.5",
-        "chalk": "^4.1.0",
-        "cosmiconfig": "^6.0.0",
-        "deepmerge": "^4.2.2",
-        "fs-extra": "^9.0.0",
-        "memfs": "^3.1.2",
-        "minimatch": "^3.0.4",
-        "schema-utils": "2.7.0",
-        "semver": "^7.3.2",
-        "tapable": "^1.0.0"
-      },
-      "dependencies": {
-        "cosmiconfig": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
-          "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "@types/parse-json": "^4.0.0",
-            "import-fresh": "^3.1.0",
-            "parse-json": "^5.0.0",
-            "path-type": "^4.0.0",
-            "yaml": "^1.7.2"
-          }
-        },
-        "schema-utils": {
-          "version": "2.7.0",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
-          "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "@types/json-schema": "^7.0.4",
-            "ajv": "^6.12.2",
-            "ajv-keywords": "^3.4.1"
-          }
-        }
-      }
-    },
     "form-data": {
     "form-data": {
       "version": "2.3.3",
       "version": "2.3.3",
       "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
       "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",

+ 2 - 1
package.json

@@ -35,7 +35,8 @@
     "serve": "vue-cli-service serve",
     "serve": "vue-cli-service serve",
     "build": "vue-cli-service build",
     "build": "vue-cli-service build",
     "lint": "vue-cli-service lint",
     "lint": "vue-cli-service lint",
-    "upload": "vue-cli-service build && node ./jd/upload.js"
+    "upload": "vue-cli-service build && node ./jd/upload.js",
+    "add":"node jd/createComponentMode.js"
   },
   },
   "dependencies": {
   "dependencies": {
     "core-js": "^3.6.5",
     "core-js": "^3.6.5",