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

时间:2018-10-20 19:06:37

标签: javascript node.js requirejs minimist

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

ByteData

我知道正在导入一个模块,但是我不理解var args = require("minimist")(process.argv.slice(2), { string: "name"}); 调用之后的第二组括号:

require()

具体来说,第二个括号是什么语法?

我知道require("minimist")(this part I don't understand) 的工作方式,并且我知道slice()创建了一个命令行参数来检查,但是通过string: "name"调用将调用哪种方法,以及如何进行? / p>

PS:该课程(由Kyle Simpson撰写)表明,稍后将对上述语法进行说明,但是我无法找到特定的部分,并且我不喜欢在不了解某些内容的情况下继续进行。我是JS和Node.js的新手。

3 个答案:

答案 0 :(得分:4)

在这种情况下,您似乎需要的模块只是返回一个函数,该函数立即用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

答案 1 :(得分:1)

尝试命名每个部分以找出答案:让我们这样说:

server <- function(input, output) {
  out_plots <- eventReactive(input$ok_input, {

    #### I call the function here and this is the variable I want
    #### to make global ########################################
    algorithm_output = some_global_function(3, 2, 1)

    do.call("grid.arrange", c(algorithm_output$indexes, nrow=3))
  })

  output$indexes <- renderPlot({
    out_plots()
  })

  out_means <- eventReactive(input$ok_means, {
    k = as.integer(input$k)

    #### I want to access the variable here ################
    matplot(algorithm_output$means[[k-1]], type = "l", lty=1)
    ########################################################

  })
  output$means <- renderPlot({
    out_means()
  })
}

如您所见,这显然是函数调用。对吧?

现在,想象一下:

var args = tmp(v1, v2);

现在您已经明白了:var tmp=require("minimist"); var v1=process.argv.slice(2); var v2={ string: "name"}; -即tmp返回的值-必须是一个接受两个参数的函数

答案 2 :(得分: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

希望现在对您来说很清楚。注释一下是否有任何内容。