如何编写可覆盖原有文件的Node.js复制脚本?现有代码不生效如何解决?
问题排查
你的代码存在3个可修复的问题:
- 末尾调用了未定义的
execute()函数,脚本启动时会直接抛出ReferenceError导致运行终止 - 错误回调中给
callback传递了两个参数,但你定义的callback仅接收1个参数,报错时无法打印完整错误信息 - 未显式指定覆盖标志,不同Node.js版本的默认行为可能存在差异,会出现同名文件无法覆盖的情况
修复后可正常运行的代码
const fs = require('fs'); // 引入文件操作常量,显式指定覆盖逻辑 const { COPYFILE_FICLONE } = fs.constants; const src = "srcPath/file.json"; const newPath = "newPath/file.json"; // 调整callback入参,兼容错误场景的信息打印 const callback = (result, err) => { if (err) { console.log(result, err); return; } console.log(result); } copy(src, newPath, callback); function copy(src, newPath, callback){ // 第三个参数传入COPYFILE_FICLONE,存在同名文件时直接覆盖旧版本 fs.copyFile(src, newPath, COPYFILE_FICLONE, (err) => { if (err) { callback("Error Found:", err); } else { callback("Success: "+newPath); } }); }
额外使用说明
- 运行脚本前请确认
srcPath下的源文件真实存在,且newPath所属的目录已经提前创建,否则fs.copyFile会抛出路径不存在错误 - 如果你需要递归复制整个目录的文件,可使用Node.js v16.7.0及以上版本支持的
fs.cp方法,开启recursive: true配置即可实现 - 建议替换原有
var声明为const/let,避免变量提升带来的意外逻辑问题
内容的提问来源于stack exchange,提问作者Lothurius Mobile Developer
相关产品推荐
相关产品推荐

