ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-04-07 16:03:46  阅读:231  来源: 互联网

标签:node 10 20 CLI sizes -- 30 Cross argv


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,10,20,CLI,sizes,--,30,Cross,argv
来源: https://www.cnblogs.com/chenxiaomeng/p/16112747.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有