我正在用Node写一个web应用程序。如果我有一些带有init函数的JS文件,我怎么从命令行调用这个函数呢?
当前回答
这个有点脏,但很好用:)
我将从脚本中调用main()函数。以前我只是在脚本的末尾调用main。然而,我确实添加了一些其他函数并将它们从脚本中导出(在代码的其他部分使用函数)-但我不想每次在其他脚本中导入其他函数时都执行main()函数。
所以我这样做了, 在我的脚本中,我删除了对main()的调用,而不是在脚本的末尾,我把这个检查:
if (process.argv.includes('main')) {
main();
}
所以当我想在CLI中调用这个函数时:node src/myScript.js main
其他回答
也许这个方法不是你想要的,但谁知道它会有帮助呢
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。——运行
命令行
probuss-MacBook-Air:fb_v8 probus$ node . --run
how are you
probuss-MacBook-Air:fb_v8 probus$
你可以添加更多的arg[0], arg[1], arg[2]…和更多的
对于节点。——运行-myarg1 -myarg2
如果你把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();
更新2020 - CLI
正如@mix3d指出的那样,你可以只运行一个命令,其中file.js是你的文件,someFunction是你的函数,后面有空格分隔的参数
npx run-func file.js someFunction "just some parameter"
就是这样。
在上面的例子中调用File.js
const someFunction = (param) => console.log('Welcome, your param is', param)
// exporting is crucial
module.exports = { someFunction }
更详细的描述
从CLI直接运行(全局)
安装
npm i -g run-func
使用方法,即运行函数“init”,它必须导出,见底部
run-func db.js init
or
从包运行。Json脚本(本地)
安装
npm i -S run-func
设置
"scripts": {
"init": "run-func db.js init"
}
使用
npm run init
参数个数
以下参数将作为函数参数传入init(param1, param2)
run-func db.js init param1 param2
重要的
函数(在本例中是init)必须在包含它的文件中导出
module.exports = { init };
或ES6导出
export { init };
不评论你为什么想这样做,或者什么可能是更标准的做法:这里是你的问题的解决方案....请记住,命令行所需的引号类型可能会有所不同。
在你的db.js中,导出init函数。有很多方法,比如:
module.exports.init = function () {
console.log('hi');
};
然后像这样调用它,假设你的db.js和你的命令提示符在同一个目录下:
node -e 'require("./db").init()'
如果你的db.js是一个模块db.js。Mjs,使用动态导入加载模块:
node -e 'import("./db.mjs").then( loadedModule => loadedModule.init() )'
对于其他读者来说,OP的init函数可以被称为任何东西,这并不重要,这只是问题中使用的特定名称。
你也可以用类似于@LeeGoddard answer的ts-node运行TypeScript。 在我的例子中,我想分别使用app和init进行测试。
// app.ts
export const app = express();
export async function init(): Promise<void> {
// app init logic...
}
npx ts-node -e 'require("./src/app").init();'
npx ts-node -e 'import("./src/app").then(a => a.init());' // esmodule