我正在Node中编写一个Web应用程序。如果我在其中有一个带有函数db.js
的JS文件init
,我怎么能从命令行调用该函数?
答案 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)
在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)
也许这个方法不是你的意思,但谁知道它可以帮助
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