# install Husky
npx husky-init && npm install
# create empty hooks
npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"' # or npx husky add .husky/commit-msg ''
npx husky add .husky/prepare-commit-msg '(exec < /dev/tty && node_modules/.bin/cz --hook) || true < /dev/null' # npx husky add .husky/prepare-commit-msg ''
# install lint-staged
npm i -D lint-staged
# install commitlint and helper
npm install -D @commitlint/config-nx-scopes @commitlint/cli @commitlint/config-conventional
# install commitizen
npm i -D commitizen @commitlint/cz-commitlint
# install lint-staged, commitizen, commitlint and helper
npm i -D lint-staged commitizen @commitlint/{cli,config-conventional,config-nx-scopes,cz-commitlint}
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx lint-staged --relative
We use --relative
so lint-staged will apply the paths of the staged files as relative paths which we need for nx format:write
. "$(dirname "$0")/_/husky.sh"
npx --no -- commitlint --edit "$1"
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
(exec < /dev/tty && node_modules/.bin/cz --hook) || true < /dev/null
npx husky add .husky/pre-push 'npx nx affected -t test && npx nx affected -t component-test'
echo "module.exports = {extends: ['@commitlint/config-conventional', '@commitlint/config-nx-scopes'],rules: {'scope-enum': [2, 'always', ['nx', 'deps', 'release', 'feature', 'data-access', 'ui', 'util', 'routes', 'model', 'api']]}}" >.commitlintrc.js
module.exports = {
extends: ['@commitlint/config-conventional', '@commitlint/config-nx-scopes'],
rules: {
'scope-enum': [
2,
'always',
[
'feature',
'data-access',
'ui',
'util',
'routes',
'model',
'api',
],
],
},
};
echo "module.exports = {path: '@commitlint/cz-commitlint'}" > .cz-config.js
echo "module.exports = {
\"{apps,libs,src}/**/*.{ts,js,html,json,scss,css,md}\": [
\"nx affected:lint --uncommitted --fix true\"
],
\"{apps,libs,src}/**/*.{ts,js,html,json,scss,css,md,yaml,yml}\": [
\"nx format:write --uncommitted\"
]
}" >.lintstagedrc.js
module.exports = {
'{apps,libs,src}/**/*.{ts,js,html,json,scss,css,md}': [
'nx affected:lint --uncommitted --fix true',
],
'{apps,libs,src}/**/*.{ts,js,html,json,scss,css,md,yaml,yml}': [
'nx format:write --uncommitted',
],
};
Reference:
https://thefullstack.engineer/full-stack-development-series-part-6-application-deployment-and-ci-cd/
https://christianlydemann.com/how-to-set-up-git-hooks-in-an-nx-repo/