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.
131 lines
5.4 KiB
131 lines
5.4 KiB
'use strict';
|
|
|
|
const fs = require('fs');
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
/**
|
|
* 同步 platform-core 定义的前端项目配置
|
|
* 从 platform-core 库的 template-project 目录中复制前端项目文件到本地项目
|
|
*/
|
|
const { rm, cp, mergeJsonFile, parseJson, sortObject } = require('./util.js');
|
|
|
|
const sync = () => {
|
|
if (isFrontendProject()) {
|
|
syncFrontendProject();
|
|
}
|
|
if (isVuePressProject()) {
|
|
syncVuePressProject();
|
|
}
|
|
console.info('sync completed!');
|
|
};
|
|
|
|
/**
|
|
* 判断项目是否是普通前端项目
|
|
* 1. 包含 package.json 文件
|
|
* 2. 不包含 webpack.env.lib.cjs 文件, 存在该文件的项目是 io.sc.platform.core.frontend
|
|
* 3. 不包含 vuepress.config.ts 文件, 存在该文件的项目是 vuepress 前端文档项目
|
|
*/
|
|
const isFrontendProject = () => {
|
|
const targetDir = process.cwd() + '/';
|
|
if (fs.existsSync(targetDir + 'package.json') && !fs.existsSync(targetDir + 'webpack.env.lib.cjs') && !fs.existsSync(targetDir + 'vuepress-src')) {
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
/**
|
|
* 判断项目是否是 vuepress 前端文档项目
|
|
* 1. 包含 package.json 文件
|
|
* 2. 不包含 vuepress.config.ts 文件, 存在该文件的项目是 vuepress 前端文档项目
|
|
*/
|
|
const isVuePressProject = () => {
|
|
const targetDir = process.cwd() + '/';
|
|
if (fs.existsSync(targetDir + 'package.json') && fs.existsSync(targetDir + 'vuepress-src')) {
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
const syncFrontendProject = () => {
|
|
const sourceDir = process.cwd() + '/node_modules/platform-core/template-project/';
|
|
const targetDir = process.cwd() + '/';
|
|
|
|
cp(sourceDir + 'src/boostrap.ts', targetDir + 'src/boostrap.ts');
|
|
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');
|
|
|
|
if (fs.existsSync(targetDir + 'public/webjars')) {
|
|
rm(targetDir + 'public/webjars');
|
|
}
|
|
rm(targetDir + 'public/configure.js');
|
|
rm(targetDir + 'public/favicon.svg');
|
|
rm(targetDir + 'public/index.html');
|
|
rm(targetDir + 'public/login-bg.jpg');
|
|
rm(targetDir + 'public/logo.svg');
|
|
cp(sourceDir + 'public', targetDir + 'public');
|
|
|
|
mergeJsonFile(targetDir + 'frontend-register.json', sourceDir + 'frontend-register.json', ['path']);
|
|
mergeJsonFile(targetDir + 'package.json', sourceDir + 'package.json', ['scripts', 'devDependencies', 'dependencies']);
|
|
mergeJsonFile(targetDir + 'tsconfig.json', sourceDir + 'tsconfig.json', ['compilerOptions']);
|
|
};
|
|
|
|
const syncVuePressProject = () => {
|
|
const sourceDir = process.cwd() + '/node_modules/platform-core/template-project/';
|
|
const targetDir = process.cwd() + '/';
|
|
const target = parseJson(targetDir + 'package.json');
|
|
const source = parseJson(sourceDir + 'package.json');
|
|
|
|
cp(sourceDir + '.browserslistrc', targetDir + '.browserslistrc');
|
|
cp(sourceDir + '.editorconfig', targetDir + '.editorconfig');
|
|
cp(sourceDir + '.gitignore', targetDir + '.gitignore');
|
|
cp(sourceDir + '.npmignore', targetDir + '.npmignore');
|
|
cp(sourceDir + '.npmrc', targetDir + '.npmrc');
|
|
|
|
if (!target.devDependencies) {
|
|
target.devDependencies = {};
|
|
}
|
|
target.devDependencies['@vuepress/bundler-webpack'] = source.devDependencies['@vuepress/bundler-webpack'];
|
|
target.devDependencies['@vuepress/theme-default'] = source.devDependencies['@vuepress/theme-default'];
|
|
target.devDependencies['sass'] = source.devDependencies['sass'];
|
|
target.devDependencies['sass-loader'] = source.devDependencies['sass-loader'];
|
|
target.devDependencies['vuepress'] = source.devDependencies['vuepress'];
|
|
sortObject(target.devDependencies);
|
|
|
|
if (!target.dependencies) {
|
|
target.devDependencies = {};
|
|
}
|
|
if (target.dependencies['platform-core']) {
|
|
target.dependencies['platform-core'] = source.version;
|
|
}
|
|
if (target.dependencies['quasar']) {
|
|
target.dependencies['quasar'] = source.dependencies['quasar'];
|
|
}
|
|
target.dependencies['vue'] = source.dependencies['vue'];
|
|
if (target.dependencies['vue-i18n']) {
|
|
target.dependencies['vue-i18n'] = source.dependencies['vue-i18n'];
|
|
}
|
|
sortObject(target.dependencies);
|
|
|
|
fs.writeFileSync(targetDir + 'package.json', JSON.stringify(target, null, ' '));
|
|
};
|
|
|
|
module.exports = sync;
|
|
|