diff --git a/packages/cna-template/template/nuxt/.husky/.gitignore b/packages/cna-template/template/nuxt/.husky/.gitignore new file mode 100644 index 000000000..c9cdc63b0 --- /dev/null +++ b/packages/cna-template/template/nuxt/.husky/.gitignore @@ -0,0 +1 @@ +_ \ No newline at end of file diff --git a/packages/cna-template/template/nuxt/.husky/commit-msg b/packages/cna-template/template/nuxt/.husky/commit-msg new file mode 100755 index 000000000..3172f280a --- /dev/null +++ b/packages/cna-template/template/nuxt/.husky/commit-msg @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +<%= pmRun %> commitlint --edit $1 diff --git a/packages/cna-template/template/nuxt/.husky/pre-commit b/packages/cna-template/template/nuxt/.husky/pre-commit new file mode 100755 index 000000000..90b6b1285 --- /dev/null +++ b/packages/cna-template/template/nuxt/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +<%= pmRun %> lint-staged diff --git a/packages/cna-template/template/nuxt/package.js b/packages/cna-template/template/nuxt/package.js index 084ac6114..a9d324ba2 100644 --- a/packages/cna-template/template/nuxt/package.js +++ b/packages/cna-template/template/nuxt/package.js @@ -33,9 +33,7 @@ module.exports = { delete pkg.devDependencies['eslint-plugin-vue'] } if (!lintStaged) { - delete pkg.husky delete pkg['lint-staged'] - delete pkg.devDependencies.husky delete pkg.devDependencies['lint-staged'] } if (!stylelint) { @@ -54,10 +52,13 @@ module.exports = { delete pkg.devDependencies.prettier } if (!commitlint) { - lintStaged && delete pkg.husky.hooks['commit-msg'] delete pkg.devDependencies['@commitlint/config-conventional'] delete pkg.devDependencies['@commitlint/cli'] } + if (!lintStaged && !commitlint) { + delete pkg.devDependencies.husky + delete pkg.scripts.postinstall + } const lintScript = Object.values(lintScripts).join(' && ') if (lintScript) { diff --git a/packages/cna-template/template/nuxt/package.json b/packages/cna-template/template/nuxt/package.json index 9f81efaa4..1482954d7 100644 --- a/packages/cna-template/template/nuxt/package.json +++ b/packages/cna-template/template/nuxt/package.json @@ -5,18 +5,13 @@ "start": "nuxt start", "generate": "nuxt generate", "lint:js": "eslint --ext \".js,.vue\" --ignore-path .gitignore .", - "lint:style": "stylelint \"**/*.{vue,css}\" --ignore-path .gitignore" + "lint:style": "stylelint \"**/*.{vue,css}\" --ignore-path .gitignore", + "postinstall": "husky install" }, "lint-staged": { "*.{js,vue}": "eslint", "*.{css,vue}": "stylelint" }, - "husky": { - "hooks": { - "commit-msg": "commitlint -E HUSKY_GIT_PARAMS", - "pre-commit": "lint-staged" - } - }, "dependencies": { "@nuxt/content": "^1.12.0", "@nuxt/typescript-runtime": "^2.0.1", @@ -40,7 +35,7 @@ "eslint-plugin-nuxt": "^2.0.0", "eslint-plugin-prettier": "^3.3.1", "eslint-plugin-vue": "^7.5.0", - "husky": "^4.3.8", + "husky": "^5.0.9", "lint-staged": "^10.5.3", "prettier": "^2.2.1", "stylelint": "^13.9.0", diff --git a/packages/create-nuxt-app/lib/saofile.js b/packages/create-nuxt-app/lib/saofile.js index 1b371f05d..7a5b6efad 100644 --- a/packages/create-nuxt-app/lib/saofile.js +++ b/packages/create-nuxt-app/lib/saofile.js @@ -1,4 +1,5 @@ const { dirname, join, relative } = require('path') +const fs = require('fs') const spawn = require('cross-spawn') const validate = require('validate-npm-package-name') const pkg = require('./package') @@ -6,6 +7,9 @@ const pkg = require('./package') const cnaTemplateDir = join(dirname(require.resolve('cna-template/package.json'))) const templateDir = join(cnaTemplateDir, 'template') const frameworksDir = join(templateDir, 'frameworks') +const addExecutable = filename => new Promise( + resolve => fs.chmod(filename, 0o775, resolve) +) module.exports = { prompts: require('./prompts'), @@ -50,6 +54,11 @@ module.exports = { }) validation.errors && validation.errors.length && process.exit(1) + const { linter } = this.answers + const eslint = linter.includes('eslint') + const lintStaged = eslint && linter.includes('lintStaged') + const commitlint = linter.includes('commitlint') + const actions = [{ type: 'add', files: '**', @@ -57,7 +66,10 @@ module.exports = { filters: { 'static/icon.png': 'features.includes("pwa")', 'content/hello.md': 'features.includes("content")', - 'pages/content.vue': 'features.includes("content")' + 'pages/content.vue': 'features.includes("content")', + '.husky/.gitignore': lintStaged || commitlint, + '.husky/commit-msg': commitlint, + '.husky/pre-commit': lintStaged } }] @@ -144,6 +156,14 @@ module.exports = { this.gitInit() } + const huskyDir = join(this.outDir, '.husky') + if (this.answers.linter.includes('lintStaged')) { + await addExecutable(join(huskyDir, 'pre-commit')) + } + if (this.answers.linter.includes('commitlint')) { + await addExecutable(join(huskyDir, 'commit-msg')) + } + await this.npmInstall({ npmClient: this.answers.pm }) if (this.answers.linter.includes('eslint')) { diff --git a/packages/create-nuxt-app/test/snapshots/index.test.js.snap b/packages/create-nuxt-app/test/snapshots/index.test.js.snap index c956154b3..9c43ec712 100644 Binary files a/packages/create-nuxt-app/test/snapshots/index.test.js.snap and b/packages/create-nuxt-app/test/snapshots/index.test.js.snap differ