/** * 用于生成前端模版项目 * 在构建 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','// ':'','//':''}); replaceAll(targetDir + 'src/shims-vue.d.ts', {'@/platform':'platform-core'}); replaceAll(targetDir + 'src/App.vue', {'@/platform':'platform-core'}); replaceAll(targetDir + 'src/views/Codemirror.vue', {'@/platform':'platform-core'}); replaceAll(targetDir + 'src/views/Dialog.vue', {'@/platform':'platform-core'}); replaceAll(targetDir + 'src/views/Select.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 + '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!');