UNPKG

3.01 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5var __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};
12Object.defineProperty(exports, "__esModule", { value: true });
13const chalk_1 = __importDefault(require("chalk"));
14const path = __importStar(require("path"));
15const fs = __importStar(require("fs-extra"));
16const cwd = process.cwd();
17function getCode(name, isPage) {
18 let clsName = isPage ? 'P' : name;
19 let code = `
20import React from '@react';
21class ${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}
44export default ${clsName};
45`;
46 return code.trim();
47}
48function 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}
60function 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}
70function 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}
77function 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}
88function 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}
100exports.default = default_1;