require() 调用后的 JavaScript 语法是什么?

What's the JavaScript syntax after the require() call?

以下代码来自我关注的 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.

的新手

试着给每个部分命名来搞清楚:让我们这样说吧:

var args = tmp(v1, v2);

如您所见,那显然是一个函数调用。对吗?

现在,想象一下:

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

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

在这种情况下,看起来您需要的模块只是返回一个您立即使用 () 调用并传入两个参数的函数: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

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

require('minimist') 将 return 类似于 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" }

您可以从 minimist 文档中找到以下内容

opts.string - a string or array of strings argument names to always treat as strings

这意味着您的 'name' 参数将被接受为字符串。来自上面的例子:

name = '123' // not 123

希望您现在已经清楚了。如果有什么不对,请评论。