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

如何在运行时为第三方Node.js CLI脚本设置prompts.override()?

给无法修改源码的prompts CLI脚本设置自动回答

下面是几个不用改目标脚本源码就能设置prompts.override()的可行方案:

方案1:用Node.js实验性加载器劫持prompts模块

通过自定义加载器,在目标脚本加载prompts模块之前,提前设置好预设答案。

  1. 新建一个加载器脚本,比如命名为prompts-override-loader.js,代码如下:
import { readFile } from 'fs/promises';
import { resolve as resolvePath } from 'path';

export async function load(url, context, nextLoad) {
  // 拦截prompts模块的加载请求
  if (url.includes('prompts/lib/index.js') || url.includes('prompts/index.js')) {
    // 先获取原始的prompts模块
    const originalModule = await nextLoad(url, context);
    // 包装模块代码,添加override逻辑
    const modifiedCode = `
      const prompts = require(${JSON.stringify(url)});
      // 这里替换成你要预设的答案,key对应prompts配置里的name字段
      prompts.override({
        username: 'test_user',
        password: 'test_pass'
      });
      module.exports = prompts;
    `;
    return {
      format: 'commonjs',
      source: modifiedCode,
      shortCircuit: true
    };
  }
  // 其他模块正常加载
  return nextLoad(url, context);
}
  1. 用这个加载器启动目标脚本:
node --experimental-loader ./prompts-override-loader.js 你的目标CLI脚本路径.js

注意:这个功能是Node.js的实验性特性,建议用Node.js 16及以上版本测试。

方案2:用require.extensions兼容旧版Node.js

如果你的Node.js版本不支持实验性加载器,可以用传统的模块缓存劫持方法:

  1. 新建注入脚本inject-prompts-override.js:
// 找到prompts模块的路径并加载
const modulePath = require.resolve('prompts');
const originalPrompts = require(modulePath);

// 设置预设答案
originalPrompts.override({
  username: 'test_user',
  password: 'test_pass'
});

// 替换模块缓存,让后续引用的都是已经设置好override的prompts
require.cache[modulePath].exports = originalPrompts;

// 加载目标CLI脚本
require('./你的目标CLI脚本路径.js');
  1. 运行这个注入脚本:
node inject-prompts-override.js

方案3:环境变量传参(看脚本是否支持)

如果目标脚本本身支持从环境变量读取回答,直接设置环境变量运行就行,但这个不是通用方案,得看目标脚本的实现:

USERNAME=test_user PASSWORD=test_pass node 你的目标CLI脚本路径.js

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:57:28