const shelljs = require('shelljs'); const path = require('path'); const changeFiles = { js: shelljs.exec('git diff --cached --name-only --diff-filter=ACM | grep .js$', {silent: true}).stdout, css: shelljs.exec('git diff --cached --name-only --diff-filter=ACM | grep .css$', {silent: true}).stdout, vue: shelljs.exec('git diff --cached --name-only --diff-filter=ACM | grep .vue$', {silent: true}).stdout, }; const lintPath = { js: path.resolve('./node_modules/.bin/eslint'), css: path.resolve('./node_modules/.bin/stylelint') }; const lintResult = { js: {}, css: {}, vueScript: {}, vueStyle: {} }; const ext = process.platform === 'win32' ? '.cmd' : ''; // Windows 平台需要加后缀 // 在执行检查脚本的时候,不显示 NPM 错误日志 if (!shelljs.grep('npm run -s', path.resolve('./.git/hooks/pre-commit')).stdout.trim()) { shelljs.sed('-i', 'npm run', 'npm run -s', path.resolve('./.git/hooks/pre-commit')); } if (changeFiles.js) { changeFiles.js = changeFiles.js.replace(/\n/g, ' '); lintResult.js = shelljs.exec(`${lintPath.js}${ext} -c .eslintrc --cache ${changeFiles.js}`); } if (changeFiles.css) { changeFiles.css = changeFiles.css.replace(/\n/g, ' '); lintResult.css = shelljs.exec(`${lintPath.css}${ext} --syntax scss --config .stylelintrc ${changeFiles.css}`); } if (changeFiles.vue) { changeFiles.vue = changeFiles.vue.replace(/\n/g, ' '); lintResult.vueScript = shelljs.exec(`${lintPath.js}${ext} -c .eslintrc --cache ${changeFiles.vue}`); lintResult.vueStyle = shelljs.exec(`${lintPath.css}${ext} --syntax scss --extract --config .stylelintrc ${changeFiles.vue}`); // eslint-disable-line } const errorCode = lintResult.js.code || lintResult.css.code || lintResult.vueScript.code || lintResult.vueStyle.code; if (errorCode) { process.exit(errorCode); // eslint-disable-line }