如何将一个npm run script.js的返回值作为参数传递给另一个npm run script2.js?

时间:2019-03-17 14:16:19

标签: node.js npm package.json

是否可以通过某种方式在IAudioEndpointVolume的{​​{1}}中实现它而不使用第三方组件?

1 个答案:

答案 0 :(得分:0)

我不确定这是否是最好的解决方案,但是我还无法提出更好的解决方案。由于我一直在寻找 Windows控制台的方法,因此我只在其中进行过检查,但我认为它也应在Linux Shell中工作。

因此,我们将有2个JavaScript文件:

  1. send-param.js:应发送(返回)字符串参数
  2. read-param.js:应获取该字符串参数作为参数

这两个JS文件均应从package.json脚本运行。该技术本身非常简单:send-param.js将字符串值写入stdout,而read-param.js然后将其作为参数。主要问题是如何将stdout转换为read-param.js脚本的参数。

要向stdout写一些东西,我们可以使用console.log,而send-param.js实际上是这样的:

console.log("Hello World!");

接下来,我们要运行read-param.js来从参数中获取"Hello World!"字符串,但是似乎不可能直接在Windows控制台中做到这一点。因此,我不得不使用临时操作将参数从stdout写入辅助文件(我刚刚将其命名为'1.txt'),这是在脚本的第一部分中完成的:

node send-param.js > 1.txt

现在我们在"Hello World!"文件中有'1.txt',我们必须以某种方式将其发送为read-param.js脚本的参数。再次,我找不到直接在Windows控制台中使用它的变量,而是使用了一个名为'ARG'的变量:

set /p ARG=<1.txt

最后,我们可以使用'ARG'变量作为read-param.js脚本的参数:

“节点read-param.js%ARG%”

我想到的第一件事是用单行脚本执行所有命令,如下所示:

"send-param.js > 1.txt && set /p ARG=<1.txt && node read-param.js %ARG%"

但是它不起作用,因为它需要作为单独的命令(see why)运行set

read-param.js中,我们仅将第一个参数读为process.argv[2](Node.js reserves的自变量为0和1)。


这是最后的工作示例

send-param.js:

console.log("Hello World!");

read-param.js:

const argument = process.argv[2];

if (!argument)
    console.log('An argument is required.');
else
    console.log(`Argument: '${argument}'`);

package.json:

"scripts": {
  "send": "node send-param.js > 1.txt && set /p ARG=<1.txt && npm run read",
  "read": "node read-param.js %ARG%",
}

现在运行npm run send命令,您将得到:Argument: 'Hello World!'