【问题标题】:How can I modify a node bin script at runtime?如何在运行时修改节点 bin 脚本?
【发布时间】:2022-08-15 22:11:26
【问题描述】:

有一个包是命令行实用程序脚本。它使用prompts 库来显示问题,然后根据答案执行操作。

我想以编程方式运行这个脚本。我可以看到提示库公开了一个overrides 方法,可以通过编程方式设置答案,但我无权访问脚本的源代码来添加此功能。此外,脚本不会导出任何函数,因此它不能被包裹在另一个脚本中。

如何以让我设置 prompts.override() 的方式运行脚本?

  • 用于覆盖的文档示例将其与 cli 程序参数结合使用,也许您的 cli 原始开发人员也以这种方式使用它? github.com/terkelg/prompts/blob/master/readme.md#override
  • 如果您知道问题的顺序和要给出的答案,则可以使用child_Process.exec 并从包装脚本中为该子进程提供标准输入,如本问题stackoverflow.com/questions/37685461/… 所示
  • \"有一个包是...\":这很神秘。向我们展示(并将我们链接到)实际代码!
  • @jsejcksn 代码是内部的
  • @Dan 你能更明确一点吗?你能提供一个你想要实现的例子吗?

标签: node.js node-modules


【解决方案1】:

示例代码:

const prompts = require('prompts');
prompts.override(require('yargs').argv);

(async () => {
  const response = await prompts([
    {
      type: 'text',
      name: 'twitter',
      message: `What's your twitter handle?`
    },
    {
      type: 'multiselect',
      name: 'color',
      message: 'Pick colors',
      choices: [
        { title: 'Red', value: '#ff0000' },
        { title: 'Green', value: '#00ff00' },
        { title: 'Blue', value: '#0000ff' }
      ],
    }
  ]);

  console.log(response);
})();

@emersonthis 如何设法将标准输入添加到 child_process

var cp = require('child_process');
var optipng = require('pandoc-bin').path; //This is a path to a command
var child = cp.spawn(optipng, ['--from=markdown', '--to=html']); //the array is the arguments

child.stdin.write('# HELLO'); //my command takes a markdown string...

child.stdout.on('data', function (data) {
    console.log('stdout: ' + data);
});
child.stdin.end();

你可以实现类似的东西,但是你了解您希望答案和问题出现的顺序。

相关来源:

【讨论】:

    猜你喜欢
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    相关资源
    最近更新 更多