|  |  |  | /** | 
					
						
							|  |  |  |  * 用于生成前端模版项目 | 
					
						
							|  |  |  |  * 在构建 platform-core 库时, 会将生成的模版工程文件一起发布, 这样前端项目可直接使用 | 
					
						
							|  |  |  |  * 另外当模版发生变化时, 也可以自动在每个前端项目中同步 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | const fs = require('fs'); | 
					
						
							|  |  |  | const json5 = require('json5'); | 
					
						
							|  |  |  | const { mkdir, rm, cp, replaceAll } = require('./.bin/util.js'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const sourceDir = './'; | 
					
						
							|  |  |  | const targetDir = './template-project/'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function parseJson5(src) { | 
					
						
							|  |  |  |   return json5.parse(fs.readFileSync(src).toString()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function generatePackageJsonFile() { | 
					
						
							|  |  |  |   const packageJson = parseJson5('./package.json'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   delete packageJson['//files']; | 
					
						
							|  |  |  |   delete packageJson['files']; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   delete packageJson['//main']; | 
					
						
							|  |  |  |   delete packageJson['main']; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   delete packageJson['//types']; | 
					
						
							|  |  |  |   delete packageJson['types']; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   delete packageJson['//bin']; | 
					
						
							|  |  |  |   delete packageJson['bin']; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   delete packageJson.scripts['lib']; | 
					
						
							|  |  |  |   delete packageJson.scripts['check']; | 
					
						
							|  |  |  |   delete packageJson.scripts['template']; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   packageJson.dependencies['platform-core'] = packageJson.version; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const names = []; | 
					
						
							|  |  |  |   for (const name in packageJson.dependencies) { | 
					
						
							|  |  |  |     names.push(name); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   names.sort((o1, o2) => { | 
					
						
							|  |  |  |     if (o1 > o2) { | 
					
						
							|  |  |  |       return 1; | 
					
						
							|  |  |  |     } else if (o1 == o2) { | 
					
						
							|  |  |  |       return 0; | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |       return -1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   const dependencies = {}; | 
					
						
							|  |  |  |   for (const name of names) { | 
					
						
							|  |  |  |     dependencies[name] = packageJson.dependencies[name]; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   packageJson.dependencies = dependencies; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   fs.writeFileSync(targetDir + 'package.json', JSON.stringify(packageJson, null, '  ')); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function generateTsconfigJsonFile() { | 
					
						
							|  |  |  |   const tsconfigJson = parseJson5('./tsconfig.json'); | 
					
						
							|  |  |  |   delete tsconfigJson['include']; | 
					
						
							|  |  |  |   delete tsconfigJson.compilerOptions['declaration']; | 
					
						
							|  |  |  |   delete tsconfigJson.compilerOptions['declarationDir']; | 
					
						
							|  |  |  |   delete tsconfigJson.compilerOptions['declarationMap']; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   fs.writeFileSync(targetDir + 'tsconfig.json', JSON.stringify(tsconfigJson, null, '  ')); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | rm('./template-project'); | 
					
						
							|  |  |  | mkdir('./template-project'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | cp('./src', targetDir + 'src'); | 
					
						
							|  |  |  | rm(targetDir + 'src/platform'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | cp('./public', targetDir + 'public'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | replaceAll(targetDir + 'src/boostrap.ts', { '@/platform': 'platform-core', '//<C> ': '', '//<C>': '' }); | 
					
						
							|  |  |  | replaceAll(targetDir + 'src/shims-vue.d.ts', { '@/platform': 'platform-core' }); | 
					
						
							|  |  |  | replaceAll(targetDir + 'src/App.vue', { '@/platform': 'platform-core' }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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 + 'vuepress.client.ts', targetDir + 'vuepress.client.ts'); | 
					
						
							|  |  |  | cp(sourceDir + 'vuepress.config.ts', targetDir + 'vuepress.config.ts'); | 
					
						
							|  |  |  | 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'); | 
					
						
							|  |  |  | generatePackageJsonFile(); | 
					
						
							|  |  |  | generateTsconfigJsonFile(); | 
					
						
							|  |  |  | console.info('tempate project generated!'); |