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

如何在Node.js中通过不同命令行指令运行同文件中的两个函数?

解决ES模块下命令行调用异步函数的问题

问题根源

  1. 你用了ES模块的import语法,但同时使用了CommonJS的module.exports——ES模块环境中不存在module对象,因此抛出ReferenceError。
  2. 改为export default时,一个模块只能有一个默认导出,第二个export default会覆盖第一个,导致只能调用单个函数;且你没有处理命令行参数触发对应函数的逻辑,执行时仅加载文件,不会自动调用目标函数。

解决方案

1. 明确项目为ES模块

在项目根目录的package.json中添加"type": "module",告诉Node.js按ES模块规则处理文件:

{
  "type": "module",
  "scripts": {
    "replace": "node replacePaths.js replace",
    "revert": "node replacePaths.js revert"
  }
}

2. 修改replacePaths.js,添加命令行触发逻辑

用命名导出两个函数,并通过process.argv读取命令行参数,调用对应函数:

// replacePaths.js
import { replaceInFile } from 'replace-in-file';

async function replace() {
    const options = {
        files: 'src/**/*.jsx',
        from: 'dev/svgs/icons-main.svg',
        to: 'staging/media/svgs/icons-main.svg',
    };

    try {
        const results = await replaceInFile(options);
        console.log('替换完成:', results);
    } catch (error) {
        console.error('替换出错:', error);
    }
}

async function revert() {
    const options = {
        files: 'src/**/*.jsx',
        from: 'staging/media/svgs/icons-main.svg',
        to: 'dev/svgs/icons-main.svg',
    };

    try {
        const results = await replaceInFile(options);
        console.log('还原完成:', results);
    } catch (error) {
        console.error('还原出错:', error);
    }
}

// 读取命令行参数,执行对应函数
const command = process.argv[2];
if (command === 'replace') {
    replace();
} else if (command === 'revert') {
    revert();
} else {
    console.error('无效命令,请使用 replace 或 revert');
}

// 命名导出(供其他模块引用,可选)
export { replace, revert };

3. 执行命令

现在可以正常运行:

npm run replace
npm run revert

补充说明

  • process.argv是Node.js的命令行参数数组:process.argv[0]是node程序路径,process.argv[1]是当前执行的文件路径,process.argv[2]就是你传入的replace/revert指令。
  • 异步函数内部已通过try/catch处理错误,直接调用即可,无需额外捕获。

内容的提问来源于stack exchange,提问作者MeltingDog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:12:43