@uni-plus/create 0.0.2 → 0.1.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @uni-plus/create
2
2
 
3
+ ## 0.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 实现 create 命令
8
+
3
9
  ## 0.0.2
4
10
 
5
11
  ### Patch Changes
package/dist/index.js CHANGED
@@ -7,10 +7,84 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
+ import { select, input, confirm } from '@inquirer/prompts';
11
+ import os from 'node:os';
12
+ import { NpmPackage } from '@uni-plus/utils';
13
+ import path from 'node:path';
14
+ import ora from 'ora';
15
+ // @ts-ignore
16
+ import fse from 'fs-extra';
17
+ import ejs from 'ejs';
18
+ import { glob } from 'glob';
10
19
  function create() {
11
20
  return __awaiter(this, void 0, void 0, function* () {
12
- console.log('create 命令执行中...');
21
+ const projectTemplate = yield select({
22
+ message: '请选择项目模版',
23
+ choices: [
24
+ {
25
+ name: 'uni-plus Base 模板',
26
+ value: '@uni-plus/template-uni-plus-base'
27
+ },
28
+ {
29
+ name: 'uni-plus Demo 模板',
30
+ value: '@uni-plus/template-uni-plus-demo'
31
+ }
32
+ ],
33
+ });
34
+ let projectName = '';
35
+ while (!projectName) {
36
+ projectName = yield input({ message: '请输入项目名' });
37
+ }
38
+ const targetPath = path.join(process.cwd(), projectName);
39
+ if (fse.existsSync(targetPath)) {
40
+ const empty = yield confirm({ message: '该目录不为空,是否清空' });
41
+ if (empty) {
42
+ fse.emptyDirSync(targetPath);
43
+ }
44
+ else {
45
+ process.exit(0);
46
+ }
47
+ }
48
+ const pkg = new NpmPackage({
49
+ name: projectTemplate,
50
+ targetPath: path.join(os.homedir(), '.uni-plus-template')
51
+ });
52
+ if (!(yield pkg.exists())) {
53
+ const spinner = ora('下载模版中...').start();
54
+ yield pkg.install();
55
+ yield sleep(1000);
56
+ spinner.stop();
57
+ }
58
+ else {
59
+ const spinner = ora('更新模版中...').start();
60
+ yield pkg.update();
61
+ yield sleep(1000);
62
+ spinner.stop();
63
+ }
64
+ const spinner = ora('创建项目中...').start();
65
+ yield sleep(1000);
66
+ const templatePath = path.join(pkg.npmFilePath, 'template');
67
+ fse.copySync(templatePath, targetPath);
68
+ spinner.stop();
69
+ const files = yield glob('**', {
70
+ cwd: targetPath,
71
+ nodir: true,
72
+ ignore: 'node_modules/**'
73
+ });
74
+ for (let i = 0; i < files.length; i++) {
75
+ const filePath = path.join(targetPath, files[i]);
76
+ const renderResult = yield ejs.renderFile(filePath, {
77
+ projectName
78
+ });
79
+ fse.writeFileSync(filePath, renderResult);
80
+ }
13
81
  });
14
82
  }
83
+ function sleep(timeout) {
84
+ return new Promise((resolve => {
85
+ setTimeout(resolve, timeout);
86
+ }));
87
+ }
88
+ create();
15
89
  export default create;
16
90
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,SAAe,MAAM;;QACnB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;IAChC,CAAC;CAAA;AAED,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uni-plus/create",
3
- "version": "0.0.2",
3
+ "version": "0.1.0",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -11,6 +11,17 @@
11
11
  "keywords": [],
12
12
  "author": "",
13
13
  "license": "ISC",
14
+ "dependencies": {
15
+ "@inquirer/prompts": "^7.2.3",
16
+ "ejs": "^3.1.10",
17
+ "fs-extra": "^11.3.0",
18
+ "glob": "^11.0.1",
19
+ "ora": "^8.1.1",
20
+ "@uni-plus/utils": "^0.1.0"
21
+ },
22
+ "devDependencies": {
23
+ "@types/ejs": "^3.1.5"
24
+ },
14
25
  "scripts": {
15
26
  "test": "echo \"Error: no test specified\" && exit 1"
16
27
  }
package/src/index.ts CHANGED
@@ -1,6 +1,84 @@
1
+ import { select, input, confirm } from '@inquirer/prompts';
2
+ import os from 'node:os';
3
+ import { NpmPackage } from '@uni-plus/utils';
4
+ import path from 'node:path';
5
+ import ora from 'ora';
6
+ // @ts-ignore
7
+ import fse from 'fs-extra';
8
+ import ejs from 'ejs';
9
+ import { glob } from 'glob';
10
+
1
11
  async function create() {
2
- console.log('create 命令执行中...')
12
+
13
+ const projectTemplate = await select({
14
+ message: '请选择项目模版',
15
+ choices: [
16
+ {
17
+ name: 'uni-plus Base 模板',
18
+ value: '@uni-plus/template-uni-plus-base'
19
+ },
20
+ {
21
+ name: 'uni-plus Demo 模板',
22
+ value: '@uni-plus/template-uni-plus-demo'
23
+ }
24
+ ],
25
+ });
26
+
27
+ let projectName = '';
28
+ while (!projectName) {
29
+ projectName = await input({ message: '请输入项目名' });
30
+ }
31
+
32
+ const targetPath = path.join(process.cwd(), projectName);
33
+
34
+ if (fse.existsSync(targetPath)) {
35
+ const empty = await confirm({ message: '该目录不为空,是否清空' });
36
+ if (empty) {
37
+ fse.emptyDirSync(targetPath);
38
+ } else {
39
+ process.exit(0);
40
+ }
41
+ }
42
+
43
+ const pkg = new NpmPackage({
44
+ name: projectTemplate,
45
+ targetPath: path.join(os.homedir(), '.uni-plus-template')
46
+ });
47
+
48
+ if (!await pkg.exists()) {
49
+ const spinner = ora('下载模版中...').start();
50
+ await pkg.install();
51
+ spinner.stop();
52
+ } else {
53
+ const spinner = ora('更新模版中...').start();
54
+ await pkg.update();
55
+ spinner.stop();
56
+ }
57
+
58
+ const spinner = ora('创建项目中...').start();
59
+
60
+ const templatePath = path.join(pkg.npmFilePath, 'template');
61
+
62
+ fse.copySync(templatePath, targetPath);
63
+
64
+ spinner.stop();
65
+
66
+ const files = await glob('**', {
67
+ cwd: targetPath,
68
+ nodir: true,
69
+ ignore: 'node_modules/**'
70
+ })
71
+
72
+ for (let i = 0; i < files.length; i++) {
73
+ const filePath = path.join(targetPath, files[i]);
74
+ const renderResult = await ejs.renderFile(filePath, {
75
+ projectName
76
+ })
77
+ fse.writeFileSync(filePath, renderResult);
78
+ }
79
+
80
+ console.log(`项目 ${projectName} 创建成功`);
81
+
3
82
  }
4
83
 
5
84
  export default create;
6
-
package/tsconfig.json CHANGED
@@ -11,5 +11,8 @@
11
11
  "strict": true,
12
12
  "skipLibCheck": true,
13
13
  "sourceMap": true
14
- }
14
+ },
15
+ "include": [
16
+ "src/**/*"
17
+ ]
15
18
  }