1.需求分析:
- 场景:公司旧项目全是html堆叠,每次更新大版本文件仍需要
手动一个个复制、替换已修改过的文件
- 需求:能不能写个脚本,
只输入路径,就能一键复制目录及文件(复制后的文件路径也得一致),不用一个个创建相同路径的文件夹再复制,直接替换即可
- 环境:需安装node.js或 安装code runner插件右键run code执行
2.运行
- 1.将CopyFiles.js放到目标项目(要复制的文件)根目录下

- 2.修改CopyFiles.js文件,在inputFiles输入要复制的路径文件(若为文件路径,则复制该文件,若为目录路径,则复制目录下所有文件)


3.CopyFiles.js代码
const fs = require("fs");
const path = require("path");
const inputFiles = [
"./pages/MSD/SalesOrderList",
];
const newProjectRoot = "./h5_copy_20250304";
function deleteDirectory(dir) {
if (fs.existsSync(dir)) {
const files = fs.readdirSync(dir);
for (const file of files) {
const filePath = path.join(dir, file);
const stat = fs.statSync(filePath);
if (stat.isDirectory()) {
deleteDirectory(filePath);
} else {
fs.unlinkSync(filePath);
}
}
fs.rmdirSync(dir);
console.log(`已删除目录: ${dir}`);
}
}
function copyFileOrDir(src, dest) {
const stat = fs.statSync(src);
if (stat.isFile()) {
const dirname = path.dirname(dest);
if (!fs.existsSync(dirname)) {
fs.mkdirSync(dirname, { recursive: true });
}
fs.copyFileSync(src, dest);
console.log(`文件已复制: ${src} -> ${dest}`);
} else if (stat.isDirectory()) {
if (!fs.existsSync(dest)) {
fs.mkdirSync(dest, { recursive: true });
}
const files = fs.readdirSync(src);
for (const file of files) {
const srcFile = path.join(src, file);
const destFile = path.join(dest, file);
copyFileOrDir(srcFile, destFile);
}
console.log(`目录已复制: ${src} -> ${dest}`);
}
}
function copyFilesToNewProject(inputFiles, newProjectRoot) {
const scriptDir = __dirname;
const absoluteNewProjectRoot = path.resolve(scriptDir, newProjectRoot);
deleteDirectory(absoluteNewProjectRoot);
fs.mkdirSync(absoluteNewProjectRoot, { recursive: true });
console.log(`已创建目录: ${absoluteNewProjectRoot}`);
for (const inputPath of inputFiles) {
const src = path.resolve(scriptDir, inputPath);
const relativePath = path.relative(scriptDir, src);
const dest = path.join(absoluteNewProjectRoot, relativePath);
copyFileOrDir(src, dest);
}
}
copyFilesToNewProject(inputFiles, newProjectRoot);