Node.js 14/16/18发布流水线fs.copyFileSync报错修复求助
解决Node.js中
fs.copyFileSync报错ERR_INVALID_ARG_TYPE的问题 错误根源
你遇到的TypeError [ERR_INVALID_ARG_TYPE]是因为**fs.copyFileSync是同步方法,根本不支持回调函数作为第三个参数**。你原来的代码把回调函数传给了第三个参数,但这个参数的预期类型是整数(文件权限mode)或配置对象,所以Node.js抛出了类型不匹配的错误。
你尝试的修改无效的可能原因
你后来的修改虽然去掉了回调,但可能忽略了两个关键点:
- 目标目录
gcdeploy可能不存在,copyFileSync不会自动创建父目录 - 手动拼接路径容易出现格式错误(比如多斜杠、路径分隔符不兼容系统)
最终修复方案
以下是完整的修复代码,解决了上述所有问题:
const fs = require('fs'); const path = require('path'); // 引入path模块处理路径 console.log(' :: INFO => Copying CF Update Stack File to GCDeploy Folder...'); // 用path.join安全拼接路径,避免格式错误 const sourceFilePath = path.join(serviceDir, slsFolder, sls_env, 'cloudformation-template-update-stack.json'); const destinationFilePath = path.join(serviceDir, 'gcdeploy', 'cloudformation-template-update-stack.json'); try { // 先确保目标目录存在,recursive: true会自动创建多级目录 fs.mkdirSync(path.dirname(destinationFilePath), { recursive: true }); // 执行同步复制,无需回调 fs.copyFileSync(sourceFilePath, destinationFilePath); // 可选:设置文件权限 fs.chmodSync(destinationFilePath, 0o755); console.log(' :: INFO => Complete\n\n'); } catch (err) { _errorCount++; _errorsOccurred = true; console.error('Error copying CF Update Stack File:', err); }
关键修改点说明
- 用
path.join替代字符串拼接路径:自动处理不同系统的路径分隔符(Windows用\,Linux用/),避免手动拼接导致的路径错误 - 新增
fs.mkdirSync创建目标目录:确保gcdeploy目录存在,{ recursive: true }参数会自动创建所有不存在的父目录 - 严格遵循
copyFileSync的API规范:同步方法用try/catch捕获错误,不需要也不能传回调函数
内容的提问来源于stack exchange,提问作者Jhimly
相关产品推荐
相关产品推荐

