web-dev-qa-db-ja.com

コマンドラインからスクリプトで関数を実行する(Node JS)

NodeでWebアプリを書いています。関数initを含むJSファイルdb.jsがある場合、コマンドラインからその関数を呼び出す方法を教えてください。

134
winhowes

なぜこれをしたいのか、何がより標準的なやり方であるのかについてのコメントはありません。これがあなたの質問に対する解決策です。あなたのコマンドラインに必要な引用符の種類は異なるかもしれません。

db.jsinit関数をエクスポートします。いろいろな方法がありますが、例えば:

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

db.jsがあなたのコマンドプロンプトと同じディレクトリにあると仮定して、それを次のように呼び出します。

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

他の読者にとって、OPのinit関数は何でも呼ばれているかもしれません、それは重要ではありません、それは質問で使用されるただ特定の名前です。

212
LeeGee

他の答えと同様に、someFile.jsに以下を追加してください。

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

その後、以下をpackage.jsonに追加できます。

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

端末から、電話をかけることができます

npm run myScript

私はこれがコマンドを覚えてそれらを使うもっとずっと簡単な方法を見つける

25
Gaz_Edge

make-runnable を試してください。

Db.jsで、最後にrequire('make-runnable');を追加します。

今、あなたはできる:

node db.js init

それ以上の引数はinitメソッドに渡されます。

21
eye_mew

プロジェクトにrun-funcをインストールしてください。

npm i -D run-func

エクスポートした関数を実行する

run-func db.js init

以下の引数は関数パラメータとして渡されますinit(param1, param2)

run-func db.js init param1 param2

これはpackage.jsonの "scripts"セクションからも実行できます。

"db-init": "run-func db.js init"

重要関数(この例ではinit)はそれを含むファイルにエクスポートされなければなりません

module.exports = { init };

またはES6エクスポート

export { init };
8
Pawel

簡単な方法:

プロジェクト構造のhelpersディレクトリにdb.jsファイルがあるとしましょう。

これで、ヘルパーディレクトリの中に入り、そしてノードコンソールに行きます。

 helpers $ node

2)db.jsファイルが必要

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

3)あなたの関数を呼び出す(あなたの場合はinit())

> db.init()

お役に立てれば

6
SrmHitter9062

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();
4
Dave

これは汚れていますが、動作します:)

スクリプトからmain()関数を呼び出します。以前は、スクリプトの最後にmainを呼び出していました。しかし、他の関数を追加してスクリプトからエクスポートしました(コードの他の部分で関数を使用するため)。ただし、他のスクリプトに他の関数をインポートするたびにmain()関数を実行したくはありません。

だから私はこれをした、私のスクリプトで私はmain()への呼び出しを削除し、そして代わりに私はこのチェックを置く:

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

だから私はCLIでその関数を呼び出したいとき:node src/myScript.js main

3
To Kra

私はIIFEをやっています。

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

このコードはただちに実行され、init関数を呼び出します。

1
Natan Deitch