我正在用Node写一个web应用程序。如果我有一些带有init函数的JS文件,我怎么从命令行调用这个函数呢?


当前回答

有时你想通过CLI运行一个函数,有时你想从另一个模块请求它。以下是如何做到这两点。

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

其他回答

也许这个方法不是你想要的,但谁知道它会有帮助呢

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

这个有点脏,但很好用:)

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

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

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

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

灵感来自https://github.com/DVLP/run-func/blob/master/index.js

我创建了https://github.com/JiangWeixian/esrua

如果文件index.ts

export const welcome = (msg: string) => {
  console.log(`hello ${msg}`)
}

你就跑

esrua ./index.ts welcome -p world

将输出hello world

make-runnable试试。

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

现在你可以做:

node db.js init

任何进一步的参数都将以列表或键值对的形式传递给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();