UNPKG

zoro-cli

Version:

https://github.com/vuejs/vue-cli

223 lines (205 loc) 5.07 kB
const { getPkgsVersion } = require('zoro-cli-util/pkg') const dependenciesMap = require('./json/dependencies') const devDependenciesMap = require('./json/devDependencies') const scriptsMap = require('./json/scripts') module.exports = async ({ api, rootOptions, Types, pkg }) => { const { type, ui, cssPreprocessor, bundler } = rootOptions const { mobile, pc, weblib, nodelib } = Types const isWeb = type === mobile || type === pc // TODO: https://github.com/yyx990803/yorkie // browserslist // pc 页面也有可能在 mobile 上打开, 所以 iOS/Android 是必选的 const browserslist = [ 'last 2 versions', 'Firefox ESR', '> 1%', 'iOS >= 8', 'Android >= 4', ] if (type === pc) { browserslist.push('ie >= 8') } // scripts const scripts = { ...scriptsMap.common, ...scriptsMap[type], ...scriptsMap[type + '-' + ui], ...scriptsMap[type + '-' + cssPreprocessor], ...scriptsMap[type + '-' + bundler], } // dependencies const dependencies = { ...dependenciesMap.base, ...dependenciesMap[type], ...dependenciesMap[cssPreprocessor], } // devDependencies const devDependencies = { ...pkg.peerDependencies, ...devDependenciesMap.base, ...devDependenciesMap.prettier, ...devDependenciesMap[type], ...devDependenciesMap[cssPreprocessor], } // some common config if (ui) { // 如果是 weblib, ui 的依赖应该是 devDependencies Object.assign( type === weblib ? devDependencies : dependencies, dependenciesMap[ui], ) Object.assign(devDependencies, devDependenciesMap[ui]) } if (isWeb) { Object.assign(scripts, scriptsMap.web) Object.assign(dependencies, dependenciesMap.web) Object.assign(devDependencies, devDependenciesMap.web) } /** * process dynamicDevDependenciesNames */ const dynamicDevDependenciesNames = [ 'eslint-config-zoro-node', 'stylelint-config-zoro', 'zoro-cli-util', ] // ui maybe needed by different types of project, such as mobile or weblib if (ui) { dynamicDevDependenciesNames.push( `babel-preset-zoro-${ui}`, `eslint-config-zoro-${ui}`, ) } else { dynamicDevDependenciesNames.push('babel-preset-zoro-web') dynamicDevDependenciesNames.push('eslint-config-zoro-web') } // web need postcss & webpack if (isWeb) { Object.assign( devDependencies, devDependenciesMap.postcss, devDependenciesMap.webpack, devDependenciesMap['webpack-postcss'], devDependenciesMap['webpack-' + cssPreprocessor], ) } if (type === weblib) { Object.assign(devDependencies, devDependenciesMap[bundler]) if (cssPreprocessor) { Object.assign( devDependencies, devDependenciesMap.postcss, devDependenciesMap[bundler + '-' + cssPreprocessor], ) } } if (type === nodelib) { dynamicDevDependenciesNames.push('babel-preset-zoro-node') } const dynamicDevDependencies = await getPkgsVersion( dynamicDevDependenciesNames, ) Object.assign(devDependencies, dynamicDevDependencies) // remove devDependencies which are also dependencies Object.keys(devDependencies).forEach(name => { if (dependencies[name]) { delete devDependencies[name] } }) api.removeDependencies(['zoro-kit', 'zoro-kit-vue', 'anyproxy']) Object.keys(scripts).forEach(scriptName => { scripts[scriptName] = scripts[scriptName].replace('entryName', pkg.name) }) api.extendPackage({ husky: { hooks: { 'pre-commit': 'lint-staged', }, }, 'lint-staged': { '*.{js,jsx,ts,tsx,vue}': ['eslint --fix'], '*.{css,vue}': ['stylelint --fix'], }, jest: { collectCoverage: true, setupFiles: ['<rootDir>/scripts/jest.setup.js'], testMatch: ['**/__tests__/**/*.(spec|test).[jt]s?(x)'], testPathIgnorePatterns: ['/node_modules/', '/lib/'], }, browserslist, scripts, dependencies, devDependencies, }) api.setScriptsKeyOrder([ 'echo', 'clean', 'cleanCache', 'anyproxy', 'lintjs', 'formatjs', 'lintcss', 'formatcss', 'new', 'create', 'jest', 'vue', 'cp', 'css', 'postcss-each', 'postcss', 'less', 'sass', 'scss', 'stylus', 'babel', 'postbabel', 'type-check', 'types', 'rollup', 'webpack', 'bundle', 'dev', 'watch', 'start', 'see', 'test', 'prebuild', 'build', 'postinstall', 'prepublish', 'inspect', 'analyze', 'profile', ]) api.setPkgKeyOrder([ 'name', 'description', 'libName', 'private', 'version', 'sideEffects', 'main', 'module', 'unpkg', 'jsdelivr', 'browser', 'files', 'types', 'config', 'installConfig', 'engines', 'browserslist', 'project', 'rollup', 'entry', 'author', 'keywords', 'license', 'repository', 'scripts', 'peerDependencies', 'dependencies', 'devDependencies', ]) }