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


当前回答

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

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

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

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

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

其他回答

2022年更新-如果你已经切换到ES模块,你不能使用require技巧,你需要使用动态导入:

node -e 'import("./db.js").then(dbMod => dbMod.init());'

或者使用——experimental- specification -resolution=节点标志:

node --experimental-specifier-resolution=node -e 'import("./db").then(dbMod => dbMod.init());'

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

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

简单的方法:

假设你在项目结构的helpers目录下有一个db.js文件。

现在进入助手目录,进入节点控制台

 helpers $ node

2)需要db.js文件

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

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

> db.init()

希望这能有所帮助

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

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

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

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

然后,您可以从终端进行呼叫

npm run myScript

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

你也可以用类似于@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