我正在Node中编写一个Web应用程序。如果我有一些带有db.js
函数的JS文件init
,我怎么能从命令行调用该函数?
没有评论你为什么要这样做,或者可能是一个更标准的做法:这里是你的问题的解决方案....请记住,命令行所需的报价类型可能会有所不同。
在你的db.js
中,输出init
函数。有很多方法,但例如:
module.exports.init = function () {
console.log('hi');
};
然后像这样调用它,假设你的db.js
与命令提示符位于同一目录中:
node -e 'require("./db").init()'
对于其他读者来说,OP的init
函数可以被称为任何东西,它并不重要,它只是问题中使用的特定名称。
简单,在javascript文件testfile.js中:
module.exports.test = function () {
console.log('hi');
};
this.test();
在提示符下运行:
node testfile.js
根据其他答案,将以下内容添加到someFile.js
module.exports.someFunction = function () {
console.log('hi');
};
然后,您可以将以下内容添加到package.json
"scripts": {
"myScript": "node -e 'require(\"./someFile\").someFunction()'"
}
从终端,您可以打电话
npm run myScript
我发现这是一种更容易记住命令并使用它们的方法
在db.js中,将require('make-runnable');
添加到最后。
现在你可以这样做:
node db.js init
任何进一步的args都会传递给init
方法。
将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 };
简单方法:
假设您在项目结构的helpers目录中有db.js文件。
现在进入帮助程序目录并转到节点控制台
helpers $ node
2)需要db.js文件
> var db = require("./db")
3)调用你的函数(在你的情况下,它的init())
> db.init()
希望这可以帮助
如果你将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();
这个很脏,但工作:)
我将从我的脚本中调用main()
函数。以前我只是在脚本末尾调用main。但是我确实添加了一些其他函数并从脚本中导出它们(在代码的其他部分使用函数) - 但是每次我在其他脚本中导入其他函数时我都不想执行main()函数。
所以我这样做了,在我的脚本中我删除了对main()的调用,而在脚本的末尾我放了这个检查:
if (process.argv.includes('main')) {
main();
}
所以当我想在CLI中调用该函数时:node src/myScript.js main
我做了一个IIFE,类似的东西:
(() => init())();
此代码将立即执行并调用init函数。
如果您的文件只包含您的功能,例如:
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