从命令行运行脚本中的函数(Node JS)

时间:2015-06-11 13:48:42

标签: javascript node.js command-line

我正在Node中编写一个Web应用程序。如果我在其中有一个带有函数db.js的JS文件init,我怎么能从命令行调用该函数?

12 个答案:

答案 0 :(得分:208)

没有评论您为什么要这样做,或者可能是更标准的做法:这里是您的问题的解决方案....承担我的命令行所需的报价类型可能会有所不同。

db.js中,导出init功能。有很多方法,但例如:

module.exports.init = function () {
  console.log('hi');
};

然后调用它,假设您的db.js与命令提示符位于同一目录中:

node -e 'require("./db").init()'

对于其他读者来说,OP的init函数可以被称为任何东西,它并不重要,它只是问题中使用的特定名称。

答案 1 :(得分:22)

根据其他答案,将以下内容添加到someFile.js

module.exports.someFunction = function () {
  console.log('hi');
};

然后,您可以将以下内容添加到package.json

"scripts": {
   "myScript": "node -e 'require(\"./someFile\").someFunction()'"
}

然后,您可以从终端拨打

npm run myScript

我发现这是一种更容易记住命令并使用它们的方法

答案 2 :(得分:21)

尝试make-runnable

在db.js中,将require('make-runnable');添加到最后。

现在你可以做到:

node db.js init

任何进一步的args都会传递给init方法。

答案 3 :(得分:8)

将run-func安装到您的项目

npm i -D run-func

运行任何导出的功能

run-func db.js init

以下任何参数都将作为函数参数init(param1, param2)

传递
run-func db.js init param1 param2

这也可以从package.json

中的“scripts”部分运行
"db-init": "run-func db.js init"

重要此功能(在此示例中为init)必须在包含它的文件中导出

module.exports = { init };

或ES6导出

export { init };

答案 4 :(得分:6)

简单的方法:

假设您在项目结构的helpers目录中有db.js文件。

现在进入帮助程序目录并转到节点控制台

date

2)需要db.js文件

 helpers $ node

3)调用你的函数(在你的情况下是init())

> var db = require("./db")

希望这会有所帮助

答案 5 :(得分:4)

如果您将db.js转变为模块,则可以从db_init.js开始,只需:node db_init.js

db.js:

module.exports = {
  method1: function () { ... },
  method2: function () { ... }
}

db_init.js:

var db = require('./db');

db.method1();
db.method2();

答案 6 :(得分:4)

有时您想通过CLI运行某个功能,有时您想从另一个模块require来运行它。这是两者的操作方法。

// file to run
const runMe = () => {}
if (require.main === module) {
  runMe()
} 
module.exports = runMe

答案 7 :(得分:3)

这是肮脏的但可以使用:)

我将从脚本中调用main()函数。以前,我只是在脚本结尾处放置对main的调用。但是我确实添加了一些其他函数,并从脚本中导出了它们(以在代码的其他部分中使用函数)-但是我不想每次在其他脚本中导入其他函数时都执行main()函数。

所以我做到了 在我的脚本中,我删除了对main()的调用,而是在脚本的末尾放置了此检查:

if (process.argv.includes('main')) {
   main();
}

因此,当我想在CLI中调用该函数时:node src/myScript.js main

答案 8 :(得分:2)

也许这个方法不是你的意思,但谁知道它可以帮助

index.js

const arg = process.argv.splice(2);

function printToCli(text){
    console.log(text)
}

switch(arg[0]){
    case "--run":
        printToCli("how are you")
    break;
    default: console.log("use --run flag");
}

并运行命令 node . --run

命令行

probuss-MacBook-Air:fb_v8 probus$ node . --run
how are you
probuss-MacBook-Air:fb_v8 probus$ 

并且您可以添加更多 arg[0] 、 arg[1] 、 arg[2] ... 以及更多

对于node . --run -myarg1 -myarg2

答案 9 :(得分:1)

我正在做IIFE,诸如此类:

(() => init())();

此代码将立即执行并调用init函数。

答案 10 :(得分:-3)

如果您的文件只包含您的功能,例如:

myFile.js:

function myMethod(someVariable) {
    console.log(someVariable)
}

从这样的命令行调用它不会发生任何事情:

node myFile.js

但如果您更改文件:

myFile.js:

myMethod("Hello World");

function myMethod(someVariable) {
    console.log(someVariable)
}

现在,这将从命令行开始:

node myFile.js

答案 11 :(得分:-3)

简单,在javascript文件testfile.js中:

module.exports.test = function () {
   console.log('hi');
};
this.test();

在提示符下运行:

node testfile.js