2024-10-22 07:31:13 +00:00

80 lines
2.5 KiB
JavaScript

/**
* This file is part of the NocoBase (R) project.
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
* Authors: NocoBase Team.
*
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
* For more information, please refer to: https://www.nocobase.com/agreement.
*/
const { Command } = require('commander');
const { run, isDev, isPackageValid, generatePlaywrightPath, generatePlugins } = require('../util');
const { dirname, resolve } = require('path');
const { existsSync, mkdirSync, readFileSync, appendFileSync } = require('fs');
const { readFile, writeFile } = require('fs').promises;
const { createStoragePluginsSymlink, createDevPluginsSymlink } = require('@nocobase/utils/plugin-symlink');
function writeToExclude() {
const excludePath = resolve(process.cwd(), '.git', 'info', 'exclude');
const content = 'packages/pro-plugins/\n';
const dirPath = dirname(excludePath);
if (!existsSync(dirPath)) {
try {
mkdirSync(dirPath, { recursive: true });
} catch (e) {
console.log(`${e.message}, ignore write to git exclude`);
return;
}
}
let fileContent = '';
if (existsSync(excludePath)) {
fileContent = readFileSync(excludePath, 'utf-8');
}
if (!fileContent.includes(content)) {
appendFileSync(excludePath, content);
}
}
/**
* @param {Command} cli
*/
module.exports = (cli) => {
const { APP_PACKAGE_ROOT } = process.env;
cli
.command('postinstall')
.allowUnknownOption()
.option('--skip-umi')
.action(async (options) => {
writeToExclude();
generatePlugins();
generatePlaywrightPath(true);
await createStoragePluginsSymlink();
if (!isDev()) {
return;
}
await createDevPluginsSymlink();
const cwd = process.cwd();
if (!existsSync(resolve(cwd, '.env')) && existsSync(resolve(cwd, '.env.example'))) {
const content = await readFile(resolve(cwd, '.env.example'), 'utf-8');
await writeFile(resolve(cwd, '.env'), content, 'utf-8');
}
if (!existsSync(resolve(cwd, '.env.test')) && existsSync(resolve(cwd, '.env.test.example'))) {
const content = await readFile(resolve(cwd, '.env.test.example'), 'utf-8');
await writeFile(resolve(cwd, '.env.test'), content, 'utf-8');
}
if (!isPackageValid('umi')) {
return;
}
if (!options.skipUmi) {
run('umi', ['generate', 'tmp'], {
stdio: 'pipe',
env: {
APP_ROOT: `${APP_PACKAGE_ROOT}/client`,
},
});
}
});
};