一、安装commitlint
1 |
npm install -D @commitlint/cli @commitlint/config-conventional |
二、创建并配置commitlint.config.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
export default { extends: ['@commitlint/config-conventional'], parserPreset: 'conventional-changelog-conventionalcommits', rules: { 'body-leading-blank': [1, 'always'], 'body-max-line-length': [2, 'always', 100], 'footer-leading-blank': [1, 'always'], 'footer-max-line-length': [2, 'always', 100], 'header-max-length': [2, 'always', 100], 'subject-case': [2, 'never', ['sentence-case', 'start-case', 'pascal-case', 'upper-case']], 'subject-empty': [2, 'never'], 'subject-full-stop': [2, 'never', '.'], 'type-case': [2, 'always', 'lower-case'], 'type-empty': [2, 'never'], 'type-enum': [ 2, 'always', ['build', 'chore', 'ci', 'docs', 'feat', 'fix', 'perf', 'refactor', 'revert', 'style', 'test'] ] }, prompt: { questions: { type: { description: "Select the type of change that you're committing", enum: { feat: { description: 'A new feature', title: 'Features', emoji: '✨' }, fix: { description: 'A bug fix', title: 'Bug Fixes', emoji: '🐛' }, docs: { description: 'Documentation only changes', title: 'Documentation', emoji: '📚' }, style: { description: 'Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)', title: 'Styles', emoji: '💎' }, refactor: { description: 'A code change that neither fixes a bug nor adds a feature', title: 'Code Refactoring', emoji: '📦' }, perf: { description: 'A code change that improves performance', title: 'Performance Improvements', emoji: '🚀' }, test: { description: 'Adding missing tests or correcting existing tests', title: 'Tests', emoji: '🚨' }, build: { description: 'Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)', title: 'Builds', emoji: '🛠' }, ci: { description: 'Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)', title: 'Continuous Integrations', emoji: '⚙️' }, chore: { description: "Other changes that don't modify src or test files", title: 'Chores', emoji: '♻️' }, revert: { description: 'Reverts a previous commit', title: 'Reverts', emoji: '🗑' } } }, scope: { description: 'What is the scope of this change (e.g. component or file name)' }, subject: { description: 'Write a short, imperative tense description of the change' }, body: { description: 'Provide a longer description of the change' }, isBreaking: { description: 'Are there any breaking changes?' }, breakingBody: { description: 'A BREAKING CHANGE commit requires a body. Please enter a longer description of the commit itself' }, breaking: { description: 'Describe the breaking changes' }, isIssueAffected: { description: 'Does this change affect any open issues?' }, issuesBody: { description: 'If issues are closed, the commit requires a body. Please enter a longer description of the commit itself' }, issues: { description: 'Add issue references (e.g. "fix #123", "re #123".)' } } } } |
三、安装husky
1 |
npm install -D husky |
四、添加husky hook
1 |
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit $1' |
五、文档
https://github.com/conventional-changelog/commitlint