'use strict'; const fs = require('fs'); Object.defineProperty(exports, '__esModule', { value: true }); /** * 同步 platform-core 定义的前端项目配置 * 从 platform-core 库的 template-project 目录中复制前端项目文件到本地项目 */ const { rm, cp, mergeJsonFile, parseJson, sortObject } = require('./util.js'); const sync = () => { if (isFrontendProject()) { syncFrontendProject(); } if (isVuePressProject()) { syncVuePressProject(); } console.info('sync completed!'); }; /** * 判断项目是否是普通前端项目 * 1. 包含 package.json 文件 * 2. 不包含 webpack.env.lib.cjs 文件, 存在该文件的项目是 io.sc.platform.core.frontend * 3. 不包含 vuepress.config.ts 文件, 存在该文件的项目是 vuepress 前端文档项目 */ const isFrontendProject = () => { const targetDir = process.cwd() + '/'; if (fs.existsSync(targetDir + 'package.json') && !fs.existsSync(targetDir + 'webpack.env.lib.cjs') && !fs.existsSync(targetDir + 'vuepress-src')) { return true; } return false; }; /** * 判断项目是否是 vuepress 前端文档项目 * 1. 包含 package.json 文件 * 2. 不包含 vuepress.config.ts 文件, 存在该文件的项目是 vuepress 前端文档项目 */ const isVuePressProject = () => { const targetDir = process.cwd() + '/'; if (fs.existsSync(targetDir + 'package.json') && fs.existsSync(targetDir + 'vuepress-src')) { return true; } return false; }; const syncFrontendProject = () => { const sourceDir = process.cwd() + '/node_modules/platform-core/template-project/'; const targetDir = process.cwd() + '/'; cp(sourceDir + 'src/boostrap.ts', targetDir + 'src/boostrap.ts'); cp(sourceDir + '.browserslistrc', targetDir + '.browserslistrc'); cp(sourceDir + '.editorconfig', targetDir + '.editorconfig'); cp(sourceDir + '.eslintrc.cjs', targetDir + '.eslintrc.cjs'); cp(sourceDir + '.gitignore', targetDir + '.gitignore'); cp(sourceDir + '.npmignore', targetDir + '.npmignore'); cp(sourceDir + '.npmrc', targetDir + '.npmrc'); cp(sourceDir + '.prettierignore', targetDir + '.prettierignore'); cp(sourceDir + '.prettierrc.json', targetDir + '.prettierrc.json'); cp(sourceDir + 'babel.config.cjs', targetDir + 'babel.config.cjs'); cp(sourceDir + 'frontend-register.json', targetDir + 'frontend-register.json'); cp(sourceDir + 'nodemon.json', targetDir + 'nodemon.json'); cp(sourceDir + 'postcss.config.cjs', targetDir + 'postcss.config.cjs'); cp(sourceDir + 'tailwind.config.cjs', targetDir + 'tailwind.config.cjs'); cp(sourceDir + 'util-components-generator.cjs', targetDir + 'util-components-generator.cjs'); cp(sourceDir + 'util-frontend-register.cjs', targetDir + 'util-frontend-register.cjs'); cp(sourceDir + 'webpack.config.common.cjs', targetDir + 'webpack.config.common.cjs'); cp(sourceDir + 'webpack.config.mf.cjs', targetDir + 'webpack.config.mf.cjs'); cp(sourceDir + 'webpack.env.build.cjs', targetDir + 'webpack.env.build.cjs'); cp(sourceDir + 'webpack.env.prod.cjs', targetDir + 'webpack.env.prod.cjs'); cp(sourceDir + 'webpack.env.serve.cjs', targetDir + 'webpack.env.serve.cjs'); if (fs.existsSync(targetDir + 'public/webjars')) { rm(targetDir + 'public/webjars'); } rm(targetDir + 'public/configure.js'); rm(targetDir + 'public/favicon.svg'); rm(targetDir + 'public/index.html'); rm(targetDir + 'public/login-bg.jpg'); rm(targetDir + 'public/logo.svg'); cp(sourceDir + 'public', targetDir + 'public'); mergeJsonFile(targetDir + 'frontend-register.json', sourceDir + 'frontend-register.json', ['path']); mergeJsonFile(targetDir + 'package.json', sourceDir + 'package.json', ['scripts', 'devDependencies', 'dependencies']); mergeJsonFile(targetDir + 'tsconfig.json', sourceDir + 'tsconfig.json', ['compilerOptions']); }; const syncVuePressProject = () => { const sourceDir = process.cwd() + '/node_modules/platform-core/template-project/'; const targetDir = process.cwd() + '/'; const target = parseJson(targetDir + 'package.json'); const source = parseJson(sourceDir + 'package.json'); cp(sourceDir + '.browserslistrc', targetDir + '.browserslistrc'); cp(sourceDir + '.editorconfig', targetDir + '.editorconfig'); cp(sourceDir + '.gitignore', targetDir + '.gitignore'); cp(sourceDir + '.npmignore', targetDir + '.npmignore'); cp(sourceDir + '.npmrc', targetDir + '.npmrc'); if (!target.devDependencies) { target.devDependencies = {}; } target.devDependencies['@vuepress/bundler-webpack'] = source.devDependencies['@vuepress/bundler-webpack']; target.devDependencies['@vuepress/theme-default'] = source.devDependencies['@vuepress/theme-default']; target.devDependencies['sass'] = source.devDependencies['sass']; target.devDependencies['sass-loader'] = source.devDependencies['sass-loader']; target.devDependencies['vuepress'] = source.devDependencies['vuepress']; sortObject(target.devDependencies); if (!target.dependencies) { target.devDependencies = {}; } if (target.dependencies['platform-core']) { target.dependencies['platform-core'] = source.version; } if (target.dependencies['quasar']) { target.dependencies['quasar'] = source.dependencies['quasar']; } target.dependencies['vue'] = source.dependencies['vue']; if (target.dependencies['vue-i18n']) { target.dependencies['vue-i18n'] = source.dependencies['vue-i18n']; } sortObject(target.dependencies); fs.writeFileSync(targetDir + 'package.json', JSON.stringify(target, null, ' ')); }; module.exports = sync;