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


当前回答

如果你把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();

其他回答

如果你把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();

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

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

我做了一个IIFE,就像这样:

(() => init())();

这段代码将立即执行并调用init函数。

make-runnable试试。

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

现在你可以做:

node db.js init

任何进一步的参数都将以列表或键值对的形式传递给init方法。

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());'