zoro-cli
Version:
https://github.com/vuejs/vue-cli
223 lines (205 loc) • 5.07 kB
JavaScript
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',
])
}