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.

105 lines
3.8 KiB

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