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.
106 lines
3.9 KiB
106 lines
3.9 KiB
/**
|
|
* 用于生成前端模版项目
|
|
* 在构建 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!');
|
|
|