You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
4.2 KiB

1 year ago
/**
* 用于生成前端模版项目
* 在构建 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'});
replaceAll(targetDir + 'src/views/View1.vue', {'@/platform':'platform-core'});
replaceAll(targetDir + 'src/views/View2.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!');