1 | "use strict";
|
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
4 | };
|
5 | var __importStar = (this && this.__importStar) || function (mod) {
|
6 | if (mod && mod.__esModule) return mod;
|
7 | var result = {};
|
8 | if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
9 | result["default"] = mod;
|
10 | return result;
|
11 | };
|
12 | Object.defineProperty(exports, "__esModule", { value: true });
|
13 | const chalk_1 = __importDefault(require("chalk"));
|
14 | const path = __importStar(require("path"));
|
15 | const fs = __importStar(require("fs-extra"));
|
16 | const cwd = process.cwd();
|
17 | function getCode(name, isPage) {
|
18 | let clsName = isPage ? 'P' : name;
|
19 | let code = `
|
20 | import React from '@react';
|
21 | class ${clsName} extends React.Component {
|
22 | constructor(){
|
23 | super();
|
24 | this.state = {
|
25 | text: 'hello, nanachi'
|
26 | };
|
27 | }
|
28 | componentDidMount() {
|
29 | // eslint-disable-next-line
|
30 | console.log('page did mount!');
|
31 | }
|
32 | componentWillMount() {
|
33 | // eslint-disable-next-line
|
34 | console.log('page will mount!');
|
35 | }
|
36 | render() {
|
37 | return (
|
38 | <div>
|
39 | {this.state.text}
|
40 | </div>
|
41 | );
|
42 | }
|
43 | }
|
44 | export default ${clsName};
|
45 | `;
|
46 | return code.trim();
|
47 | }
|
48 | function validateNanachiProject() {
|
49 | let pkg = {};
|
50 | try {
|
51 | pkg = require(path.join(cwd, 'package.json'));
|
52 | }
|
53 | catch (err) {
|
54 | }
|
55 | if (!pkg.nanachi_project) {
|
56 | console.log(chalk_1.default.red('当前目录不是 nanachi 项目, 创建失败.'));
|
57 | process.exit(1);
|
58 | }
|
59 | }
|
60 | function validatePageName(pageName, isPage) {
|
61 | if (/[^\w]/g.test(pageName)) {
|
62 | console.log(chalk_1.default.red('目录命名不合法, 创建失败.'));
|
63 | process.exit(1);
|
64 | }
|
65 | if (!isPage && /[^A-Z]/g.test(pageName.charAt(0))) {
|
66 | console.log(chalk_1.default.red('组件所在目录名首字母必须大写, 创建失败.'));
|
67 | process.exit(1);
|
68 | }
|
69 | }
|
70 | function validatePageExists(dist, isPage) {
|
71 | let exists = fs.existsSync(dist);
|
72 | if (exists) {
|
73 | console.log(chalk_1.default.red(`${path.relative(cwd, dist)} ${isPage ? '页面' : '组件'}已存在, 创建失败.`));
|
74 | process.exit(1);
|
75 | }
|
76 | }
|
77 | function createPage(data) {
|
78 | let { name, dist, isPage } = data;
|
79 | let code = getCode(name, isPage);
|
80 | fs.ensureFileSync(dist);
|
81 | fs.writeFile(dist, code, function (err) {
|
82 | if (err) {
|
83 | throw err;
|
84 | }
|
85 | console.log(chalk_1.default.green(`${path.relative(cwd, dist)} ${isPage ? '页面' : '组件'}创建成功.`));
|
86 | });
|
87 | }
|
88 | function default_1(data) {
|
89 | let { name, isPage } = data;
|
90 | let dist = path.join(cwd, 'source', isPage ? 'pages' : 'components', name, 'index.js');
|
91 | validateNanachiProject();
|
92 | validatePageName(name, isPage);
|
93 | validatePageExists(dist, isPage);
|
94 | createPage({
|
95 | name,
|
96 | dist,
|
97 | isPage
|
98 | });
|
99 | }
|
100 | exports.default = default_1;
|