UNPKG

4.09 kBJavaScriptView Raw
1"use strict";
2var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4 return new (P || (P = Promise))(function (resolve, reject) {
5 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8 step((generator = generator.apply(thisArg, _arguments || [])).next());
9 });
10};
11Object.defineProperty(exports, "__esModule", { value: true });
12const helper_1 = require("@tarojs/helper");
13const fs = require("fs-extra");
14const _ = require("lodash/fp");
15const path = require("path");
16const TEST_FRAMEWORKS = ['jest', 'mocha', 'ava', 'tape', 'jesmine', 'karma'];
17const LINTERS = ['eslint', 'jslint', 'tslint', 'jshint'];
18const README = ['readme', 'readme.md', 'readme.markdown'];
19const GITIGNORE = ['.gitignore'];
20const EDITORCONFIG = ['.editorconfig'];
21function default_1({ appPath }) {
22 return __awaiter(this, void 0, void 0, function* () {
23 const PROJECT_PACKAGE_PATH = path.join(appPath, 'package.json');
24 const PROJECT_FOLDER_FILES = fs.readdirSync('./');
25 if (!fs.existsSync(PROJECT_PACKAGE_PATH)) {
26 console.log(helper_1.chalk.red(`找不到${PROJECT_PACKAGE_PATH},请确定当前目录是Taro项目根目录!`));
27 process.exit(1);
28 }
29 const projectPackage = require(PROJECT_PACKAGE_PATH);
30 const devDependencies = _.keysIn(_.get('devDependencies', projectPackage));
31 const inDevDependencies = dependencies => _.intersectionBy(_.toLower, devDependencies, dependencies).length > 0;
32 const hasRecommandTestFrameworks = inDevDependencies(TEST_FRAMEWORKS);
33 const hasRecommandLinters = inDevDependencies(LINTERS);
34 const inProjectFolder = filenames => _.intersectionBy(_.toLower, PROJECT_FOLDER_FILES, filenames).length > 0;
35 const hasReadme = inProjectFolder(README);
36 const hasGitignore = inProjectFolder(GITIGNORE);
37 const hasEditorconfig = inProjectFolder(EDITORCONFIG);
38 const errorLines = [];
39 if (!hasRecommandTestFrameworks) {
40 errorLines.push({
41 desc: '没有检查到常见的测试依赖(jest/mocha/ava/tape/jesmine/karma), 配置测试可以帮助提升项目质量',
42 valid: true,
43 solution: '可以参考 https://github.com/NervJS/taro-ui-sample 项目, 其中已经包含了完整的测试配置与范例'
44 });
45 }
46 if (!hasRecommandLinters) {
47 errorLines.push({
48 desc: '没有检查到常见的 linter (eslint/jslint/jshint/tslint), 配置 linter 可以帮助提升项目质量',
49 valid: true,
50 solution: 'Taro 还提供了定制的 ESLint 规则, 可以帮助开发者避免一些常见的问题. 使用 taro cli 创建新项目即可体验'
51 });
52 }
53 if (!hasReadme) {
54 errorLines.push({
55 desc: '没有检查到 Readme (readme/readme.md/readme.markdown), 编写 Readme 可以方便其他人了解项目',
56 valid: true
57 });
58 }
59 if (!hasGitignore) {
60 errorLines.push({
61 desc: '没有检查到 .gitignore 配置, 配置 .gitignore 以避免将敏感信息或不必要的内容提交到代码仓库',
62 valid: true
63 });
64 }
65 if (!hasEditorconfig) {
66 errorLines.push({
67 desc: '没有检查到 .editconfig 配置, 配置 editconfig 以统一项目成员编辑器的代码风格',
68 valid: true
69 });
70 }
71 return {
72 desc: '检查推荐内容',
73 lines: errorLines
74 };
75 });
76}
77exports.default = default_1;
78//# sourceMappingURL=recommandValidator.js.map
\No newline at end of file