copyBaseFiles 方法

实现思路:

  • 安装公共组件平台的依赖,判断原本的 package.json 是否存在 react-markdown antd 依赖,不存在就加上

  • 添加公共组件平台的 devbuild命令

  • 将生成的新的 package.json 复制到 components-page 目录下

实现代码

点击 展开/收起 jsx 代码
import fs from 'fs';
import path from 'path';

function copyBaseFiles() {
  const sourcePath = path.join(process.cwd(), 'package.json');
  const destinationPath = path.join(
    process.cwd(),
    'components-page',
    'package.json',
  );

  console.log('------------------------------------------------------------');

  const packageJson = JSON.parse(fs.readFileSync(sourcePath, 'utf-8'));

  // 添加所需的依赖 react-markdown
  packageJson.dependencies = packageJson.dependencies || {};

  if (!packageJson.dependencies['react-markdown']) {
    packageJson.dependencies['react-markdown'] = '^8.0.0';
    console.log('添加 react-markdown 依赖');
  }

  if (!packageJson.dependencies['antd']) {
    packageJson.dependencies['antd'] = '^5.0.0';
    console.log('添加 antd 依赖');
  }

  // 添加开发依赖
  packageJson.devDependencies = packageJson.devDependencies || {};

  if (!packageJson.devDependencies['vite']) {
    packageJson.devDependencies['vite'] = '^4.0.0';
    console.log('添加 vite 依赖');
  }

  // 覆盖默认的启动和构建脚本
  packageJson.scripts = {
    ...packageJson.scripts,
    dev: 'vite',
    build: 'vite build',
  };

  // 写入更新后的 package.json 文件
  fs.writeFileSync(destinationPath, JSON.stringify(packageJson, null, 2));
  console.log('复制和更新 package.json 到 components-page 目录下');

  // 复制额外的 SCSS 文件
  const extraFiles = ['_overhide.scss', '_global.scss'];
  const srcDir = path.join(process.cwd(), 'src');
  const destDir = path.join(process.cwd(), 'components-page', 'src');

  extraFiles.forEach((file) => {
    const sourceFilePath = path.join(srcDir, file);
    const destinationFilePath = path.join(destDir, file);

    if (fs.existsSync(sourceFilePath)) {
      if (!fs.existsSync(destDir)) {
        fs.mkdirSync(destDir, { recursive: true });
      }
      fs.copyFileSync(sourceFilePath, destinationFilePath);
      console.log(`复制 ${file} 到 components-page/src 目录下`);
    } else {
      console.warn(`${file} 不存在`);
    }
  });
}

export default copyBaseFiles;