|  |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const fs = require('fs'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Object.defineProperty(exports, '__esModule', { value: true }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * 同步 platform-core 定义的前端项目配置 | 
					
						
							|  |  |  |  * 从 platform-core 库的 template-project 目录中复制前端项目文件到本地项目 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | const { mkdir, rm, cp, mergeJsonFile, parseJson, sortObject, isFileExisted } = 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() + '/'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!isFileExisted(targetDir + 'src/remote-components')) { | 
					
						
							|  |  |  |     mkdir(targetDir + 'src/remote-components'); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   if (!isFileExisted(targetDir + 'src/remote-components/remote-components.json')) { | 
					
						
							|  |  |  |     cp(sourceDir + 'src/remote-components/remote-components.json', targetDir + 'src/remote-components/remote-components.json'); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   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; |