Javascript

node.js:使用不同的CLI将命令行参数传递给节点Cross Platform

本文主要是介绍node.js:使用不同的CLI将命令行参数传递给节点Cross Platform,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Passing command line arguments to node Cross Platform using different CLI

我将通过cli向自定义节点脚本传递一个可选参数,如下所示:

$ node myscript.js --sizes 10,20,30

myscript.js使用process.argv捕获--sizes列表,如下所示:

if (process.argv.indexOf('--sizes') !== -1) {
    var sizeArgs = process.argv[process.argv.indexOf('--sizes') + 1];
    console.log(sizeArgs); //--> 10,20,30
    // ...
    // using sizeArgs.split(',') later to create an array: ['10','20','30']
    // plus some other logic to validate values are numbers etc etc.
} 

期望的结果是,console.log打印字符串10,20,30,这就是在通过以下方式运行命令(最初显示的命令)时正确发生的情况:

 

  • Mac OS-使用终端或ITerm
  • Mac OSX-使用终端或ITerm
  • Windows-使用命令提示(cmd.exe)

问题

在Windows console.log(sizeArgs)上通过PowerShell运行同一命令时,仅打印10。

很明显,字符串10,20,30中的逗号在某种程度上被解释为另一个参数,正如下面的测试所揭示的那样:

// print process.argv
process.argv.forEach(function (val, index, array) {
    console.log(index + ': ' + val);
});

 


 

PowerShell打印:

...

2: --sizes

3: 10

4: 20

5: 30

 

对于满足所需结果的环境,打印如下:

 

...

2: --sizes

3: 10,20,30

 

帮助

考虑到PowerShell中的怪癖,如何跨平台实现这一点。最终我需要获得一个大小数组。

我之所以选择使用逗号[,作为--sizes字符串的分隔符,是因为还可以提供另一个可选参数(--outdir接受文件路径作为字符串)。

注意:我知道有几个包解决方案yarg、args等(这可能解决PowerShell问题,也可能不解决),但是,我正在尝试在这个阶段避免额外的依赖性。

 


通过确保--sizes值10,20,30放在双引号中解决了这个问题。

正如这个答案中所建议的。

因此,向node传递包含逗号的参数的跨平台方法如下:

$ node myscript.js --sizes"10,20,30"

复试

现在,原始问题中使用的测试在所有测试平台/环境中打印如下:

 

...

2: --sizes

3: 10,20,30

 

 

 

webdriver.io 如果不同平台的设置可以在wdio.conf下加入

npm run local -- --platform web

如果这时候参数有多个,这边则以数组的形式去执行

 
specs: process.argv.indexOf('--platform') != -1 ? [`./tests/features/${process.argv[process.argv.indexOf('--platform') + 1]}/**/*.feature`] : ['./tests/**/*.feature'],
    // Patterns to exclude.

 

这篇关于node.js:使用不同的CLI将命令行参数传递给节点Cross Platform的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!