4

以下代码来自我正在关注的 Node.js 课程:

var args = require("minimist")(process.argv.slice(2), { string: "name"});

我知道正在导入一个模块,但我不明白require()调用后的第二组括号:

require("minimist")(this part I don't understand)

具体来说,就语法而言,第二组括号是什么?

我知道它是如何slice()工作的,并且我知道这string: "name"会创建一个命令行参数来检查,但是通过require()调用调用了什么方法,以及如何调用?

PS:课程(by Kyle Simpson)表示上面的语法会在后面解释,但是我一直没能定位到具体的部分,我不喜欢不理解就继续。我是 JS 和 Node.js 的新手。

4

3 回答 3

4

在这种情况下,您需要的模块看起来只是返回一个您立即调用()并传入两个参数的函数:process.argv.slice(2){ string: "name"}

因此,如果您的模块如下所示:

// minimist.js
function test(str){
    console.log(str)
    return "Called with:" + str
}
module.exports = test;  // exports the function

你可以像这样使用它:

var arg = require('./minimist.js')("Hello") // calls the function minimist.js exported
于 2018-10-20T19:12:25.467 回答
1

minimist是一个解析命令行参数的包,它导出一个函数。

require('minimist')将返回一个类似的函数function(args, opts={})。然后你将参数传递给这个函数。

第一个论点——process.argv.slice(2)

process.argv是你的命令的一部分的数组。例如,如果您在终端中输入

node app.js --test -x 1 --name '123'

process.argv将是一个数组

['node', 'app.js', '--test', '-x', 1, '--name', '123']

很明显你['node', 'app.js']必须打电话。因此,要获得您必须使用的选项.slice(2),它将是

['--test', '-x', 1, '--name', '123']

现在去下一个...

第二个论点-{ string: "name" }

从极简主义文档中,您可以找到以下内容

opts.string- 始终视为字符串的字符串或字符串参数名称数组

这意味着您的“名称”参数将被接受为字符串。从上面的例子:

name = '123' // not 123

希望你现在清楚了。评论如果有什么不是。

于 2018-10-20T19:25:41.923 回答
1

尝试命名每个部分以弄清楚:让我们这样说:

var args = tmp(v1, v2);

如您所见,这显然是一个函数调用。正确的?

现在,想象一下:

var tmp=require("minimist");
var v1=process.argv.slice(2);
var v2={ string: "name"};

现在你明白了: - 即 -tmp返回的值slice()必须是一个接受两个参数的函数

于 2018-10-20T19:12:11.070 回答