package.json
中的scripts
中实现它?package.json
中的scripts
中实现它?我不确定这是最好的解决方案,但我还没有想出更好的方法。由于我正在寻找一种适用于Windows控制台的方法,所以我只在那里检查了它,但我认为它也应该在Linux shell中工作。
因此,我们将有两个JavaScript文件:
send-param.js
:应该发送(返回)一个字符串参数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
现在,我们已经在'1.txt'
文件中拥有了"Hello World!"
,并且必须以某种方式将其作为参数发送到read-param.js
脚本中。同样,在Windows控制台中我找不到直接做法,只能使用一个变量,我称之为'ARG'
:
set /p ARG=<1.txt
最后,我们可以使用'ARG'
变量作为我们的read-param.js
脚本的参数:
"node read-param.js %ARG%"
我首先想到的是像这样执行所有命令的单行脚本:
"send-param.js > 1.txt && set /p ARG=<1.txt && node read-param.js %ARG%"
但是由于需要将set
作为单独的命令运行,所以它不起作用(请看原因)。
在read-param.js
中,我们只是读取第一个参数作为process.argv[2]
(Node.js 保留前两个参数用于自身参数)。
这里是最终可用的示例:
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
命令,您将获得:参数:'Hello World!'
。