You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 10:02:54