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

'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/css/tailwind.css', targetDir + 'src/css/tailwind.css');
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');
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;