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


当前回答

不评论你为什么想这样做,或者什么可能是更标准的做法:这里是你的问题的解决方案....请记住,命令行所需的引号类型可能会有所不同。

在你的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函数可以被称为任何东西,这并不重要,这只是问题中使用的特定名称。

其他回答

简单的方法:

假设你在项目结构的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();

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

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

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

如果你想从你的。env文件中包含环境变量,你可以使用env-cmd:

npx env-cmd node -e 'require("./db").init()'

如果你想在文件中运行一个特定的函数,使用run-func:

npx env-cmd npx run-func db.js init someArg

或者,为已接受的答案提供一个参数,你必须这样做:

npx env-cmd node -e 'require("./db").init(someArg)'

在这里编写/更新表达式比为命令提供不同的参数更不显式(例如,当你回头检查时更容易错过),所以我建议使用env-cmd和run-func。

注意:必要时,我通常还会在后面加上——experimental-modules。

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

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

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

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

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

npm run myScript

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