NodeでWebアプリを書いています。db.js
関数が含まinit
れているJSファイルがある場合、コマンドラインからその関数を呼び出すにはどうすればよいですか?
NodeでWebアプリを書いています。db.js
関数が含まinit
れているJSファイルがある場合、コマンドラインからその関数を呼び出すにはどうすればよいですか?
回答:
なぜこれを実行するのか、またはより標準的な方法は何であるかについてのコメントはありません。これが質問に対する解決策です。...コマンドラインで必要な引用符の種類は異なる場合があることに注意してください。
でdb.js
、init
関数をエクスポートします。多くの方法がありますが、例えば:
module.exports.init = function () {
console.log('hi');
};
次にdb.js
、コマンドプロンプトと同じディレクトリにいると想定して、次のように呼び出します。
node -e 'require("./db").init()'
他の読者にとって、OPの init
機能は何とでも呼ばれる可能性があり、それは重要ではなく、質問で使用される特定の名前にすぎません。
module.exports.init = function () { console.log('hi'); };
そして、node -e 'require("./db").init()'
何とか私のために仕事をしませんでした。私が何を間違えたかはわかりませんが、あなたの考えに従って、私はを使用してmodule.exports = myFunction,
から、私のためにnode -e 'require("./myFunction")()'
働きました。
node -e 'require("./index").handler(require("./fixtures/sample_event_01.json"), {}, console.log)'
。真ん中{}
はコンテキストです。自由に調整してください。また、console.logは少し原始的ですが、良いスタートです。もちろん、他のコメントで述べられているようにrequire()のindex.js / handlerである専用のCLI.jsを書くこともできます。
他の回答と同様に、以下を追加します someFile.js
module.exports.someFunction = function () {
console.log('hi');
};
次に、以下を追加できます package.json
"scripts": {
"myScript": "node -e 'require(\"./someFile\").someFunction()'"
}
端末から、次に呼び出すことができます
npm run myScript
コマンドを覚えて使用する方がはるかに簡単な方法だと思います
make-runnableを試してください。
db.jsでrequire('make-runnable');
、最後に追加します。
今あなたはできる:
node db.js init
それ以上の引数はinit
メソッドに渡されます。
CLIから直接実行(グローバル)
インストール
npm i -g run-func
使用法、つまり関数「init」を実行します。エクスポートする必要があります。下部を参照してください
run-func db.js init
または
package.jsonスクリプトから実行(ローカル)
インストール
npm i -S run-func
セットアップ
"scripts": {
"init": "run-func db.js init"
}
使用法
npm run init
パラメータ
次の引数はすべて関数パラメーターとして渡されます init(param1, param2)
run-func db.js init param1 param2
重要
関数(この例ではinit
)は、それを含むファイルにエクスポートする必要があります
module.exports = { init };
またはES6エクスポート
export { init };
make-runnable
いましたが、これはそれよりはるかに優れていると私は思います。ありがとう。
npm i -g run-func
これは汚れていますが動作します :)
main()
スクリプトから関数を呼び出します。以前は、スクリプトの最後にmainへの呼び出しを配置していました。ただし、他のいくつかの関数を追加してスクリプトからエクスポートしました(コードの他の一部の関数を使用するため)。ただし、他の関数を他のスクリプトにインポートするたびにmain()関数を実行したくありません。
だから私はこれを行いました、スクリプトでmain()への呼び出しを削除し、代わりにスクリプトの最後にこのチェックを入れました:
if (process.argv.includes('main')) {
main();
}
したがって、CLIでその関数を呼び出す場合: node src/myScript.js main
私はIIFEをします、そのようなもの:
(() => init())();
このコードはすぐに実行され、init関数を呼び出します。
node init.js
と、ファイルにIIFEが含まれていれば動作します。私はあなたの質問を完全に理解していなかったと思います。ごめんなさい。
(init)();
必要に応じて、さらに簡略化することもできます:)
単純な、javascriptファイルtestfile.js:
module.exports.test = function () {
console.log('hi');
};
this.test();
プロンプトで実行:
node testfile.js
test
は毎回実行されるため、ファイルを変更して別の関数を呼び出す必要があります)
たとえば、ファイルに関数が含まれているだけの場合:
myFile.js:
function myMethod(someVariable) {
console.log(someVariable)
}
このようにコマンドラインから呼び出しても何も起こりません:
node myFile.js
しかし、ファイルを変更した場合:
myFile.js:
myMethod("Hello World");
function myMethod(someVariable) {
console.log(someVariable)
}
これはコマンドラインから動作します:
node myFile.js