Node.js子进程spawn选项中使用破折号(“--”)的参数

3

我正在尝试使用带有"--"参数的child_process spawn,但似乎由于某种原因它并没有被识别。

我想要执行的命令是: wp-env run tests-cli "wp plugin update --all"

(这是一个用于运行wordpress环境的cli包 - https://www.npmjs.com/package/@wordpress/env

这里的双引号对于命令的正常工作非常重要,所以我认为这可能是问题的一部分。

下面是我正在尝试使用的代码的一般思路:

const { spawn } = require("child_process");
 
const child = spawn('npx', [
    "wp-env",
    "run",
    "tests-cli",
    "wp",
    "plugin",
    "update",
    "--all"
], {shell: true});
 
var scriptOutput = "";
 
child.stdout.setEncoding('utf8');
 
child.stdout.on('data', function(data) {
    console.log('stdout: ' + data);
    data=data.toString();
    scriptOutput+=data;
});
 
child.stderr.setEncoding('utf8');
child.stderr.on('data', function(data) {
    console.log('stderr: ' + data);
    data=data.toString();
    scriptOutput+=data;
});
 
child.on('close', function(code) {
    console.log('closing code: ' + code);
    console.log('Full output of script: ',scriptOutput);
});

这是我得到的输出:
Starting 'wp plugin update' on the tests-cli container. 

我尝试了很多其他类似的组合,但是遗憾的是它们都没有生效。

在谷歌上找不到任何线索,希望这里有人能够帮忙解决。我想根本原因并不是特别与这个软件包相关,但是我没有真正遇到过使用“--”作为一般参数的问题,所以我认为它与这个组合以及需要双引号的要求有关。

例如:

const child = spawn('npx', [
    "--version"
], {shell: true});

这将完全正常工作。


还有其他建议吗? - user16699981
1个回答

0
你正在做的实际上是运行:
wp-env run tests-cli wp plugin update --all

注意:不要加引号。
如果您想要运行wp-env run tests-cli "wp plugin update --all",您需要执行以下操作:
const child = spawn('npx', [
    "wp-env",
    "run",
    "tests-cli",
    "wp plugin update --all"
], {shell: true});

这就是在bash中引号的作用:它将引号内的所有内容视为单个参数。


已经尝试过了,但这并不起作用,仍然输出与上面展示的相同的输出,例如 - “在 tests-cli 容器上启动 'wp plugin update'。”而没有“--all”。 - user16699981
你尝试在命令行中运行 npx wp-env run tests-cli "wp plugin update --all" 了吗?它输出了什么? - slebetman
是的,它在 tests-cli 容器上输出“开始执行 'wp plugin update --all'”。 - user16699981
你是如何运行你的脚本的?是直接使用 ./script.js 运行还是通过 npm 使用 npm run script 呢? - slebetman
直接输入命令,例如 'node file.js'。 - user16699981

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接