create-aiot 2.0.1-alpha.11 → 2.0.1-alpha.13

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/lib/index.js CHANGED
@@ -19,12 +19,11 @@ const TemplateUtil_1 = __importDefault(require("./utils/TemplateUtil"));
19
19
  function createAction(options, tem) {
20
20
  return __awaiter(this, void 0, void 0, function* () {
21
21
  const templateList = yield TemplateUtil_1.default.requestTemplateList();
22
- const { name, v, aspect, packageName, template = tem, eslint = false } = options;
22
+ const { name, aspect, packageName, template = tem, eslint = false } = options;
23
23
  const templateItem = templateList.find((item) => item.name === template);
24
24
  if (templateItem) {
25
25
  const param = {
26
26
  name,
27
- version: v,
28
27
  template: templateItem,
29
28
  packageName,
30
29
  tools: {
@@ -33,7 +32,7 @@ function createAction(options, tem) {
33
32
  aspect
34
33
  };
35
34
  TemplateUtil_1.default.createProject(param, {
36
- data: { version: v, appName: name, packageName },
35
+ data: { appName: name, packageName },
37
36
  includes: (path) => {
38
37
  const stats = fs_1.default.statSync(path);
39
38
  if (stats.isDirectory()) {
@@ -67,13 +66,6 @@ function getAiotCreateCommand() {
67
66
  return TemplateUtil_1.default.validateProjectName(value);
68
67
  }
69
68
  },
70
- {
71
- name: 'v',
72
- description: 'poject version',
73
- enableInquirer: true,
74
- defaultValue: '1.0.0',
75
- type: 'string'
76
- },
77
69
  {
78
70
  name: 'template',
79
71
  description: 'prject template',
@@ -129,16 +121,10 @@ function getCrerateXtsCommand() {
129
121
  defaultValue: 'xts.app.test',
130
122
  type: 'string'
131
123
  },
132
- {
133
- name: 'v',
134
- description: 'poject version',
135
- enableInquirer: true,
136
- defaultValue: '1.0.0',
137
- type: 'string'
138
- },
139
124
  {
140
125
  name: 'aspect',
141
126
  type: 'string',
127
+ defaultValue: 'aspect1',
142
128
  description: 'Do you need to create some aspect, with multiple aspect names separated by commas',
143
129
  enableInquirer: true
144
130
  }
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { ICommand } from '@aiot-toolkit/commander'\nimport fs from 'fs'\nimport Path from 'path'\nimport IProjectParam from './interface/IProjectParam'\nimport TemplateUtil from './utils/TemplateUtil'\n\nasync function createAction(options: any, tem?: string) {\n const templateList = await TemplateUtil.requestTemplateList()\n\n const { name, v, aspect, packageName, template = tem, eslint = false } = options\n\n const templateItem = templateList.find((item) => item.name === template)\n if (templateItem) {\n const param: IProjectParam = {\n name,\n version: v,\n template: templateItem,\n packageName,\n tools: {\n eslint\n },\n aspect\n }\n TemplateUtil.createProject(param, {\n data: { version: v, appName: name, packageName },\n includes: (path) => {\n const stats = fs.statSync(path)\n if (stats.isDirectory()) {\n return ['src'].includes(Path.basename(path))\n } else {\n return ['.json', '.ux'].includes(Path.extname(path))\n }\n }\n })\n } else {\n console.log('template error')\n }\n}\n\nexport async function getAiotCreateCommand(): Promise<ICommand> {\n const templateList = await TemplateUtil.requestTemplateList()\n\n return {\n name: '',\n description: 'default',\n paramList: [\n {\n name: 'name',\n description: 'poject name',\n enableInquirer: true,\n defaultValue: 'aiot-project',\n type: 'string',\n validate(value: string) {\n return TemplateUtil.validateProjectName(value)\n }\n },\n {\n name: 'v',\n description: 'poject version',\n enableInquirer: true,\n defaultValue: '1.0.0',\n type: 'string'\n },\n {\n name: 'template',\n description: 'prject template',\n type: 'select',\n enableInquirer: true,\n choices: templateList.map((item) => {\n return {\n value: item.name,\n description: item.description\n }\n })\n },\n {\n name: 'eslint',\n type: 'confirm',\n description: 'Enabling eslint, if true, will create an eslint file',\n enableInquirer: true,\n defaultValue: false\n },\n {\n name: 'aspect',\n type: 'string',\n description: '配置aspect名称'\n }\n ],\n action: (option: any) => {\n createAction(option)\n }\n }\n}\n\nexport async function getCrerateXtsCommand(): Promise<ICommand> {\n return {\n name: 'xts',\n description: 'create xts template project',\n paramList: [\n {\n name: 'name',\n description: 'poject name',\n enableInquirer: true,\n defaultValue: 'xts-project',\n type: 'string',\n validate(value: string) {\n return TemplateUtil.validateProjectName(value)\n }\n },\n {\n name: 'packageName',\n description: 'package name',\n enableInquirer: true,\n defaultValue: 'xts.app.test',\n type: 'string'\n },\n {\n name: 'v',\n description: 'poject version',\n enableInquirer: true,\n defaultValue: '1.0.0',\n type: 'string'\n },\n {\n name: 'aspect',\n type: 'string',\n description:\n 'Do you need to create some aspect, with multiple aspect names separated by commas',\n enableInquirer: true\n }\n ],\n action: (option: any) => {\n createAction(option, 'xts')\n }\n }\n}\n"],"sourceRoot":"../src"}
1
+ {"version":3,"sources":["index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { ICommand } from '@aiot-toolkit/commander'\nimport fs from 'fs'\nimport Path from 'path'\nimport IProjectParam from './interface/IProjectParam'\nimport TemplateUtil from './utils/TemplateUtil'\n\nasync function createAction(options: any, tem?: string) {\n const templateList = await TemplateUtil.requestTemplateList()\n\n const { name, aspect, packageName, template = tem, eslint = false } = options\n\n const templateItem = templateList.find((item) => item.name === template)\n if (templateItem) {\n const param: IProjectParam = {\n name,\n template: templateItem,\n packageName,\n tools: {\n eslint\n },\n aspect\n }\n TemplateUtil.createProject(param, {\n data: { appName: name, packageName },\n includes: (path) => {\n const stats = fs.statSync(path)\n if (stats.isDirectory()) {\n return ['src'].includes(Path.basename(path))\n } else {\n return ['.json', '.ux'].includes(Path.extname(path))\n }\n }\n })\n } else {\n console.log('template error')\n }\n}\n\nexport async function getAiotCreateCommand(): Promise<ICommand> {\n const templateList = await TemplateUtil.requestTemplateList()\n\n return {\n name: '',\n description: 'default',\n paramList: [\n {\n name: 'name',\n description: 'poject name',\n enableInquirer: true,\n defaultValue: 'aiot-project',\n type: 'string',\n validate(value: string) {\n return TemplateUtil.validateProjectName(value)\n }\n },\n {\n name: 'template',\n description: 'prject template',\n type: 'select',\n enableInquirer: true,\n choices: templateList.map((item) => {\n return {\n value: item.name,\n description: item.description\n }\n })\n },\n {\n name: 'eslint',\n type: 'confirm',\n description: 'Enabling eslint, if true, will create an eslint file',\n enableInquirer: true,\n defaultValue: false\n },\n {\n name: 'aspect',\n type: 'string',\n description: '配置aspect名称'\n }\n ],\n action: (option: any) => {\n createAction(option)\n }\n }\n}\n\nexport async function getCrerateXtsCommand(): Promise<ICommand> {\n return {\n name: 'xts',\n description: 'create xts template project',\n paramList: [\n {\n name: 'name',\n description: 'poject name',\n enableInquirer: true,\n defaultValue: 'xts-project',\n type: 'string',\n validate(value: string) {\n return TemplateUtil.validateProjectName(value)\n }\n },\n {\n name: 'packageName',\n description: 'package name',\n enableInquirer: true,\n defaultValue: 'xts.app.test',\n type: 'string'\n },\n {\n name: 'aspect',\n type: 'string',\n defaultValue: 'aspect1',\n description:\n 'Do you need to create some aspect, with multiple aspect names separated by commas',\n enableInquirer: true\n }\n ],\n action: (option: any) => {\n createAction(option, 'xts')\n }\n }\n}\n"],"sourceRoot":"../src"}
@@ -4,7 +4,6 @@ import ITemplate from './ITemplate';
4
4
  */
5
5
  export default interface IProjectParam {
6
6
  name: string;
7
- version: string;
8
7
  template: ITemplate;
9
8
  tools: {
10
9
  eslint: boolean;
@@ -1 +1 @@
1
- {"version":3,"sources":["interface/IProjectParam.ts"],"names":[],"mappings":"","file":"IProjectParam.js","sourcesContent":["import ITemplate from './ITemplate'\n\n/**\n * IProjectParam\n */\nexport default interface IProjectParam {\n name: string\n version: string\n template: ITemplate\n tools: {\n eslint: boolean\n }\n aspect?: string\n packageName?: string\n}\n"],"sourceRoot":"../../src"}
1
+ {"version":3,"sources":["interface/IProjectParam.ts"],"names":[],"mappings":"","file":"IProjectParam.js","sourcesContent":["import ITemplate from './ITemplate'\n\n/**\n * IProjectParam\n */\nexport default interface IProjectParam {\n name: string\n template: ITemplate\n tools: {\n eslint: boolean\n }\n aspect?: string\n packageName?: string\n}\n"],"sourceRoot":"../../src"}
@@ -1,17 +1,32 @@
1
1
  [
2
2
  {
3
- "name": "ux",
4
- "path": "./ux",
5
- "description": "ux-it is..."
3
+ "type": "ux",
4
+ "demoList": [
5
+ {
6
+ "name": "vela-demo",
7
+ "path": "./vela-demo",
8
+ "description": "vela demo template"
9
+ }
10
+ ]
6
11
  },
7
12
  {
8
- "name": "xts",
9
- "path": "./xts/app-package-name",
10
- "description": "xts app template"
13
+ "type": "xts",
14
+ "demoList": [
15
+ {
16
+ "name": "xts",
17
+ "path": "./xts/app-package-name",
18
+ "description": "xts app template"
19
+ }
20
+ ]
11
21
  },
12
22
  {
13
- "name": "test_git",
14
- "path": "https://github.com/dcloudio/hello-uniapp.git",
15
- "description": "this is ..., from git"
23
+ "type": "git",
24
+ "demoList": [
25
+ {
26
+ "name": "test_git",
27
+ "path": "https://github.com/dcloudio/hello-uniapp.git",
28
+ "description": "this is ..., from git"
29
+ }
30
+ ]
16
31
  }
17
32
  ]
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "{{appName}}",
3
- "version": "{{version }}",
3
+ "version": "{{version}}",
4
4
  "projectType": "ux"
5
5
  }
@@ -0,0 +1,25 @@
1
+ ## 快速上手
2
+
3
+ ### 1. 开发
4
+
5
+ ```
6
+ npm install
7
+ npm run start
8
+ ```
9
+
10
+ ### 2. 构建
11
+
12
+ ```
13
+ npm run build
14
+ npm run release
15
+ ```
16
+
17
+ ### 3. 调试
18
+
19
+ ```
20
+ npm run watch
21
+ ```
22
+
23
+ ## 了解更多
24
+
25
+ 你可以通过我们的[官方文档](https://iot.mi.com/vela/quickapp)熟悉和了解快应用。
@@ -0,0 +1,5 @@
1
+ /.nyc_output
2
+ /coverage
3
+ /node_modules
4
+ /dist
5
+ /build
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "{{ appName }}",
3
+ "version": "1.0.0",
4
+ "description": "",
5
+ "engines": {
6
+ "node": ">=8.10"
7
+ },
8
+ "scripts": {
9
+ "start": "aiot server --watch --open-nuttx",
10
+ "build": "aiot build",
11
+ "release": "aiot release",
12
+ "watch": "aiot watch --open-nuttx",
13
+ "lint": "eslint --format codeframe --fix --ext .ux,.js src/"
14
+ },
15
+ "devDependencies": {
16
+ "@aiot-toolkit/velasim": "^0.1.23",
17
+ "@aiot-toolkit/jsc": "^1.0.3",
18
+ "aiot-toolkit": "^{{ toolkitVersion }}",
19
+ "babel-eslint": "^10.0.1",
20
+ "eslint": "^6.8.0",
21
+ "eslint-plugin-ux": "^0.0.4"
22
+ }
23
+ }
@@ -0,0 +1,10 @@
1
+ <script>
2
+ export default {
3
+ onCreate() {
4
+ console.log('app created')
5
+ },
6
+ onDestroy() {
7
+ console.log('app destroyed')
8
+ }
9
+ }
10
+ </script>
@@ -0,0 +1 @@
1
+ {"a":{"b":"default hello"}}
@@ -0,0 +1 @@
1
+ {"a":{"b":"hello"}}
@@ -0,0 +1 @@
1
+ {"a":{"b":"你好"}}
@@ -0,0 +1,32 @@
1
+ {
2
+ "package": "com.application.watch.demo",
3
+ "name": "{{appName}}",
4
+ "versionName": "1.0.0",
5
+ "versionCode": 1,
6
+ "minPlatformVersion": 1200,
7
+ "icon": "/common/logo.png",
8
+ "simulationVersion": "default",
9
+ "deviceTypeList": [
10
+ "watch"
11
+ ],
12
+ "features": [
13
+ {
14
+ "name": "system.router"
15
+ }
16
+ ],
17
+ "config": {
18
+ "logLevel": "log",
19
+ "designWidth": 480
20
+ },
21
+ "router": {
22
+ "entry": "pages/index",
23
+ "pages": {
24
+ "pages/index": {
25
+ "component": "index"
26
+ },
27
+ "pages/detail": {
28
+ "component": "detail"
29
+ }
30
+ }
31
+ }
32
+ }
@@ -0,0 +1,26 @@
1
+ <template>
2
+ <div class="demo-page">
3
+ <text class="title">{{text}}</text>
4
+ </div>
5
+ </template>
6
+
7
+ <script>
8
+ export default {
9
+ private: {
10
+ text: '欢迎打开详情页'
11
+ }
12
+ }
13
+ </script>
14
+
15
+ <style>
16
+ .demo-page {
17
+ flex-direction: column;
18
+ justify-content: center;
19
+ align-items: center;
20
+ }
21
+
22
+ .title {
23
+ font-size: 20px;
24
+ text-align: center;
25
+ }
26
+ </style>
@@ -0,0 +1,49 @@
1
+ <template>
2
+ <div class="demo-page">
3
+ <text class="title">{{$t('a.b')}},欢迎打开{{title}}</text>
4
+ <!-- 点击跳转详情页 -->
5
+ <input class="btn" type="button" value="跳转到详情页" onclick="routeDetail" />
6
+ </div>
7
+ </template>
8
+
9
+ <script>
10
+ import router from '@system.router'
11
+ import configuration from '@system.configuration'
12
+
13
+ export default {
14
+ // 页面级组件的数据模型,影响传入数据的覆盖机制:private内定义的属性不允许被覆盖
15
+ private: {
16
+ title: '示例页面'
17
+ },
18
+
19
+ routeDetail() {
20
+ // 跳转到应用内的某个页面,router用法详见:文档->接口->页面路由
21
+ router.push({
22
+ uri: '/pages/detail'
23
+ })
24
+ }
25
+ }
26
+ </script>
27
+
28
+ <style>
29
+ .demo-page {
30
+ flex-direction: column;
31
+ justify-content: center;
32
+ align-items: center;
33
+ }
34
+
35
+ .title {
36
+ font-size: 20px;
37
+ text-align: center;
38
+ }
39
+
40
+ .btn {
41
+ width: 200px;
42
+ height: 40px;
43
+ margin-top: 20px;
44
+ border-radius: 5px;
45
+ background-color: #09ba07;
46
+ font-size: 20px;
47
+ color: #ffffff;
48
+ }
49
+ </style>
@@ -0,0 +1,4 @@
1
+ /node_modules
2
+ /dist
3
+ /build
4
+ /wasmUnpacked
@@ -2,7 +2,7 @@
2
2
  "package": "{{packageName}}",
3
3
  "name": "{{appName}}",
4
4
  "icon": "/$app_resource/icon.png",
5
- "versionName": "1.0",
5
+ "versionName": "1.0.0",
6
6
  "versionCode": 1,
7
7
  "minPlatformVersion": 1000,
8
8
  "features": [
@@ -31,5 +31,9 @@ declare class TemplateUtil {
31
31
  * @param aspect
32
32
  */
33
33
  static createAspect(projectAbsolutePath: string, aspect: string): void;
34
+ /**
35
+ * 修改_gitignore为.gitignore
36
+ */
37
+ static changeFileName(projectAbsolutePath: string): void;
34
38
  }
35
39
  export default TemplateUtil;
@@ -12,6 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
+ const ColorConsole_1 = __importDefault(require("@aiot-toolkit/shared-utils/lib/ColorConsole"));
15
16
  const FileUtil_1 = __importDefault(require("@aiot-toolkit/shared-utils/lib/utils/FileUtil"));
16
17
  const NetworkUtil_1 = __importDefault(require("@aiot-toolkit/shared-utils/lib/utils/NetworkUtil"));
17
18
  const prompts_1 = require("@inquirer/prompts");
@@ -24,7 +25,9 @@ const template_json_1 = __importDefault(require("../template/template.json"));
24
25
  class TemplateUtil {
25
26
  static requestTemplateList() {
26
27
  return __awaiter(this, void 0, void 0, function* () {
27
- return template_json_1.default;
28
+ const templateList = [];
29
+ template_json_1.default.map((item) => templateList.push(...item.demoList));
30
+ return templateList;
28
31
  });
29
32
  }
30
33
  /**
@@ -52,7 +55,7 @@ class TemplateUtil {
52
55
  let projectName = name;
53
56
  let projectAbsolutePath = path_1.default.join(process.cwd(), projectName);
54
57
  while (fs_extra_1.default.existsSync(projectAbsolutePath)) {
55
- console.log(`${projectAbsolutePath} exists. `);
58
+ ColorConsole_1.default.warn(`${projectAbsolutePath} exists. `);
56
59
  projectName = yield (0, prompts_1.input)({
57
60
  message: 'please new project name',
58
61
  validate: this.validateProjectName
@@ -71,14 +74,18 @@ class TemplateUtil {
71
74
  else {
72
75
  const templateAbsolutePath = path_1.default.join(__dirname, '../template/', path);
73
76
  fs_extra_1.default.copySync(templateAbsolutePath, projectAbsolutePath);
74
- // xts项目-处理aspect内容
75
- aspect && TemplateUtil.createAspect(projectAbsolutePath, aspect);
77
+ // 修改_gitignore为.gitignore
78
+ TemplateUtil.changeFileName(projectAbsolutePath);
76
79
  }
77
80
  }
78
81
  // 遍历项目文件,替换词语
79
82
  if (keywords && keywords.data) {
83
+ // ux项目,添加toolkitVersion
84
+ keywords['data']['toolkitVersion'] = require('../../package.json').version;
80
85
  TemplateUtil.performReplace(keywords, projectAbsolutePath);
81
86
  }
87
+ // xts项目-处理aspect内容
88
+ aspect && TemplateUtil.createAspect(projectAbsolutePath, aspect);
82
89
  // 执行插件
83
90
  if (plugins) {
84
91
  for (let item of plugins) {
@@ -129,6 +136,21 @@ class TemplateUtil {
129
136
  }, targetAspectPath);
130
137
  });
131
138
  }
139
+ /**
140
+ * 修改_gitignore为.gitignore
141
+ */
142
+ static changeFileName(projectAbsolutePath) {
143
+ const oldPath = path_1.default.join(projectAbsolutePath, '_gitignore');
144
+ const newPath = path_1.default.join(projectAbsolutePath, '.gitignore');
145
+ fs_extra_1.default.rename(oldPath, newPath, (err) => {
146
+ if (err) {
147
+ ColorConsole_1.default.throw(`File _gitignore rename error ${err}`);
148
+ }
149
+ else {
150
+ ColorConsole_1.default.log(`File .gitignore rename success`);
151
+ }
152
+ });
153
+ }
132
154
  }
133
155
  exports.default = TemplateUtil;
134
156
 
@@ -1 +1 @@
1
- {"version":3,"sources":["utils/TemplateUtil.ts"],"names":[],"mappings":"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","file":"TemplateUtil.js","sourcesContent":["import FileUtil from '@aiot-toolkit/shared-utils/lib/utils/FileUtil'\nimport NetworkUtil from '@aiot-toolkit/shared-utils/lib/utils/NetworkUtil'\nimport { input } from '@inquirer/prompts'\nimport FS from 'fs-extra'\nimport Path from 'path'\nimport IProjectParam from '../interface/IProjectParam'\nimport ITemplate from '../interface/ITemplate'\nimport json from '../template/template.json'\n\n/**\n * TemplateUtil\n */\nclass TemplateUtil {\n static async requestTemplateList(): Promise<ITemplate[]> {\n return json\n }\n\n /**\n * 验证项目名称,只能包含:字母、数字、-、_\n * @param value\n * @returns\n */\n static validateProjectName(value: string): boolean | string {\n const reg = /^[0-9a-zA-Z_\\u4e00-\\u9fa5\\-]+$/\n if (!value) {\n return `Please enter a project name`\n }\n if (!reg.test(value)) {\n return 'The project name can contain only Chinese, letters, number, _ , -'\n }\n\n return true\n }\n\n static async createXtsProject() {}\n\n static async createProject(\n param: IProjectParam,\n keywords?: {\n data: Record<string, string>\n includes?: (path: string) => boolean\n },\n plugins?: ((projectPath: string, param: IProjectParam) => Promise<void>)[]\n ) {\n const { name, template, aspect } = param\n\n // 获取项目名称和绝对路径,如果存在,则再次输入\n let projectName = name\n let projectAbsolutePath = Path.join(process.cwd(), projectName)\n while (FS.existsSync(projectAbsolutePath)) {\n console.log(`${projectAbsolutePath} exists. `)\n projectName = await input({\n message: 'please new project name',\n validate: this.validateProjectName\n })\n projectAbsolutePath = Path.join(process.cwd(), projectName)\n }\n\n FS.mkdirSync(projectAbsolutePath)\n\n // 复制模板\n if (template) {\n const { path } = template\n // 远程\n if (['http', 'git'].find((item) => path.startsWith(item))) {\n await NetworkUtil.gitClone(path, projectAbsolutePath)\n }\n //本地\n else {\n const templateAbsolutePath = Path.join(__dirname, '../template/', path)\n FS.copySync(templateAbsolutePath, projectAbsolutePath)\n // xts项目-处理aspect内容\n aspect && TemplateUtil.createAspect(projectAbsolutePath, aspect)\n }\n }\n // 遍历项目文件,替换词语\n if (keywords && keywords.data) {\n TemplateUtil.performReplace(keywords, projectAbsolutePath)\n }\n\n // 执行插件\n if (plugins) {\n for (let item of plugins) {\n await item(projectAbsolutePath, param)\n }\n }\n }\n /**\n * 遍历项目文件,替换词语\n * @param keywords\n * @param projectAbsolutePath\n */\n static performReplace(\n keywords: {\n data: Record<string, string>\n includes?: (path: string) => boolean\n },\n projectAbsolutePath: string\n ) {\n const { data, includes } = keywords\n const files = FileUtil.readAlldirSync(projectAbsolutePath, includes)\n if (files && files.length) {\n files.forEach((item) => {\n FileUtil.replaceFileContent(item, data)\n })\n }\n }\n /**\n * xts项目-处理aspect内容\n * @param projectAbsolutePath\n * @param aspect\n */\n static createAspect(projectAbsolutePath: string, aspect: string) {\n // 按照逗号分割字符串,且去掉空格\n const aspects = aspect.replace(' ', '').split(',')\n const aspectAbsolutePath = Path.join(__dirname, '../template', 'xts', 'aspect1')\n // 循环生成自定义aspect\n aspects.map((aspectItem) => {\n const targetAspectPath = Path.join(projectAbsolutePath, aspectItem)\n FS.copySync(aspectAbsolutePath, targetAspectPath)\n // 替换关键字\n TemplateUtil.performReplace(\n {\n data: { aspectName: aspectItem },\n includes: (path) => {\n const stats = FS.statSync(path)\n if (stats.isDirectory()) {\n return ['src'].includes(Path.basename(path))\n } else {\n return ['.json', '.ux'].includes(Path.extname(path))\n }\n }\n },\n targetAspectPath\n )\n })\n }\n}\nexport default TemplateUtil\n"],"sourceRoot":"../../src"}
1
+ {"version":3,"sources":["utils/TemplateUtil.ts"],"names":[],"mappings":"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","file":"TemplateUtil.js","sourcesContent":["import ColorConsole from '@aiot-toolkit/shared-utils/lib/ColorConsole'\nimport FileUtil from '@aiot-toolkit/shared-utils/lib/utils/FileUtil'\nimport NetworkUtil from '@aiot-toolkit/shared-utils/lib/utils/NetworkUtil'\nimport { input } from '@inquirer/prompts'\nimport FS from 'fs-extra'\nimport Path from 'path'\nimport IProjectParam from '../interface/IProjectParam'\nimport ITemplate from '../interface/ITemplate'\nimport json from '../template/template.json'\n\n/**\n * TemplateUtil\n */\nclass TemplateUtil {\n static async requestTemplateList(): Promise<ITemplate[]> {\n const templateList: ITemplate[] = []\n json.map((item) => templateList.push(...item.demoList))\n return templateList\n }\n\n /**\n * 验证项目名称,只能包含:字母、数字、-、_\n * @param value\n * @returns\n */\n static validateProjectName(value: string): boolean | string {\n const reg = /^[0-9a-zA-Z_\\u4e00-\\u9fa5\\-]+$/\n if (!value) {\n return `Please enter a project name`\n }\n if (!reg.test(value)) {\n return 'The project name can contain only Chinese, letters, number, _ , -'\n }\n\n return true\n }\n\n static async createXtsProject() {}\n\n static async createProject(\n param: IProjectParam,\n keywords?: {\n data: Record<string, string>\n includes?: (path: string) => boolean\n },\n plugins?: ((projectPath: string, param: IProjectParam) => Promise<void>)[]\n ) {\n const { name, template, aspect } = param\n\n // 获取项目名称和绝对路径,如果存在,则再次输入\n let projectName = name\n let projectAbsolutePath = Path.join(process.cwd(), projectName)\n while (FS.existsSync(projectAbsolutePath)) {\n ColorConsole.warn(`${projectAbsolutePath} exists. `)\n projectName = await input({\n message: 'please new project name',\n validate: this.validateProjectName\n })\n projectAbsolutePath = Path.join(process.cwd(), projectName)\n }\n\n FS.mkdirSync(projectAbsolutePath)\n\n // 复制模板\n if (template) {\n const { path } = template\n // 远程\n if (['http', 'git'].find((item) => path.startsWith(item))) {\n await NetworkUtil.gitClone(path, projectAbsolutePath)\n }\n //本地\n else {\n const templateAbsolutePath = Path.join(__dirname, '../template/', path)\n FS.copySync(templateAbsolutePath, projectAbsolutePath)\n // 修改_gitignore为.gitignore\n TemplateUtil.changeFileName(projectAbsolutePath)\n }\n }\n // 遍历项目文件,替换词语\n if (keywords && keywords.data) {\n // ux项目,添加toolkitVersion\n keywords['data']['toolkitVersion'] = require('../../package.json').version\n TemplateUtil.performReplace(keywords, projectAbsolutePath)\n }\n // xts项目-处理aspect内容\n aspect && TemplateUtil.createAspect(projectAbsolutePath, aspect)\n\n // 执行插件\n if (plugins) {\n for (let item of plugins) {\n await item(projectAbsolutePath, param)\n }\n }\n }\n /**\n * 遍历项目文件,替换词语\n * @param keywords\n * @param projectAbsolutePath\n */\n static performReplace(\n keywords: {\n data: Record<string, string>\n includes?: (path: string) => boolean\n },\n projectAbsolutePath: string\n ) {\n const { data, includes } = keywords\n const files = FileUtil.readAlldirSync(projectAbsolutePath, includes)\n if (files && files.length) {\n files.forEach((item) => {\n FileUtil.replaceFileContent(item, data)\n })\n }\n }\n /**\n * xts项目-处理aspect内容\n * @param projectAbsolutePath\n * @param aspect\n */\n static createAspect(projectAbsolutePath: string, aspect: string) {\n // 按照逗号分割字符串,且去掉空格\n const aspects = aspect.replace(' ', '').split(',')\n const aspectAbsolutePath = Path.join(__dirname, '../template', 'xts', 'aspect1')\n // 循环生成自定义aspect\n aspects.map((aspectItem) => {\n const targetAspectPath = Path.join(projectAbsolutePath, aspectItem)\n FS.copySync(aspectAbsolutePath, targetAspectPath)\n // 替换关键字\n TemplateUtil.performReplace(\n {\n data: { aspectName: aspectItem },\n includes: (path) => {\n const stats = FS.statSync(path)\n if (stats.isDirectory()) {\n return ['src'].includes(Path.basename(path))\n } else {\n return ['.json', '.ux'].includes(Path.extname(path))\n }\n }\n },\n targetAspectPath\n )\n })\n }\n /**\n * 修改_gitignore为.gitignore\n */\n static changeFileName(projectAbsolutePath: string) {\n const oldPath = Path.join(projectAbsolutePath, '_gitignore')\n const newPath = Path.join(projectAbsolutePath, '.gitignore')\n FS.rename(oldPath, newPath, (err) => {\n if (err) {\n ColorConsole.throw(`File _gitignore rename error ${err}`)\n } else {\n ColorConsole.log(`File .gitignore rename success`)\n }\n })\n }\n}\nexport default TemplateUtil\n"],"sourceRoot":"../../src"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-aiot",
3
- "version": "2.0.1-alpha.11",
3
+ "version": "2.0.1-alpha.13",
4
4
  "description": "An easy way to start aiot project",
5
5
  "main": "lib/index.js",
6
6
  "keywords": [
@@ -27,7 +27,7 @@
27
27
  "test": "node ./__tests__/create-aiot.test.js"
28
28
  },
29
29
  "dependencies": {
30
- "@aiot-toolkit/commander": "2.0.1-alpha.11",
30
+ "@aiot-toolkit/commander": "2.0.1-alpha.13",
31
31
  "ansi-colors": "^4.1.3",
32
32
  "cli-progress": "^3.12.0",
33
33
  "simple-git": "^3.19.1"
@@ -35,5 +35,5 @@
35
35
  "devDependencies": {
36
36
  "@types/cli-progress": "^3.11.0"
37
37
  },
38
- "gitHead": "efd50ce0ed4755bc2cd12aebc5114319e75d9927"
38
+ "gitHead": "49040b26a267943df4d0b202b200d4df5bcbc1ef"
39
39
  }