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

问题描述 投票:126回答:10

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

javascript node.js command-line
10个回答
214
投票

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

在你的db.js中,输出init函数。有很多方法,但例如:

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

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

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

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


-3
投票

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

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

在提示符下运行:

node testfile.js

27
投票

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

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

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

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

从终端,您可以打电话

npm run myScript

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


21
投票

试试make-runnable

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

现在你可以这样做:

node db.js init

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


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 };

6
投票

简单方法:

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

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

 helpers $ node

2)需要db.js文件

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

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

> db.init()

希望这可以帮助


4
投票

如果你将db.js变成一个模块,你可以从db_init.jsnode db_init.js那里得到它。

db.js:

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

db_init.js:

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

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

3
投票

这个很脏,但工作:)

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

所以我这样做了,在我的脚本中我删除了对main()的调用,而在脚本的末尾我放了这个检查:

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

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


1
投票

我做了一个IIFE,类似的东西:

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

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


-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
© www.soinside.com 2019 - 2024. All rights reserved.