UNPKG

zoro-cli

Version:

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

132 lines (104 loc) 5.78 kB
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 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 = _objectSpread({}, scriptsMap.common, {}, scriptsMap[type], {}, scriptsMap[type + '-' + ui], {}, scriptsMap[type + '-' + cssPreprocessor], {}, scriptsMap[type + '-' + bundler]); // dependencies const dependencies = _objectSpread({}, dependenciesMap.base, {}, dependenciesMap[type], {}, dependenciesMap[cssPreprocessor]); // devDependencies const devDependencies = _objectSpread({}, 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']); };