2016-08-09 16 views
5

私はlodashカスタムビルドと同様のものを作ろうとしています。私はNPMビンでスクリプトを実行する方法をいくつかのチュートリアルを読んでパラメータを使用してnpm {bin:script.js}を実行する方法

を指定

だけカテゴリにカスタムモジュールを作成
lodash category=collection,function 

:だから一般的に、私は次のようにユーザーの書き込みコマンドをできるようにしたいです。私が何か間違ったことを理解した場合に備えて、私はそれを書いています。

だから私はこの部分でpackage.json持っている場合:

"main": "bin/index.js", 
"bin": { 
    "snippet": "bin/index.js" 
}, 

を、私はnpm install -gコンソールコマンドスニペットをリッスンする必要があり、私はそれを書くときにフォルダbinでスクリプトindex.jsを実行します。

この部分は正しく動作しているようです。 index.jsに何かシンプルなものがあると、すなわちconsole.log('It Works')です。

標準的な状況では、ユーザーがスクリプトにパラメータを渡すようにしたいとします。だから、私はすべてのパラメータは、variabile process.argvにする必要があることが分かった。

process.argvプロパティは、Node.jsのプロセスが開始されたときに渡されたコマンドライン 引数を含む配列を返します。最初の 要素はprocess.execPathになります。 2番目の要素は、実行中のJavaScriptファイルへのパス になります。残りの要素は、追加のコマンドライン引数であれば になります。

私は単純にconsole.logとスクリプトを実行します。

  1. 私はコマンドでスクリプトを実行する場合はsnippet -f -a 出力は次のとおりです。[ 'node', 'path/to/file' ]

  2. 私はnode bin/index.js -f -a 出力を介してスクリプトを実行する場合は、次のとおりです。[ 'node', 'path/to/file', '-f', '-a' ]

私はそれを理解しない、その同じスクリプト異なる出力です。しかし、私はそれがパラメータを渡すことはありませんbinコマンドを介してスクリプトを呼び出すときのように見てみてください。

ここにこの経験がある人はいますか?そして、私が間違っていることを私に助言しますか?

また、これとは別のやり方でこれを行う方法もありますか?

ありがとうございました。

+0

いいですね。あなたは他の旗、または長い旗で試しましたか?多分予約名を使用しています。 (つまり、[mocha source script](https://github.com/mochajs/mocha/blob/master/bin/mocha))。いくつかのコード例を表示できますか? – Dario

+0

ちょっと@Darioあなたの答えに感謝します。ランダムな他の文字で試してみました。 mz package.jsonを編集して、同じファイルにテストを追加しました。これは正しく動作するので、たとえばnpmを呼び出すとテストカテゴリ= thisIsOneが呼び出されます。これは私にこの引数を表示します。もしnpmをスニペットでテストしても動作しません。 – Andurit

+0

ちょっと@Dario私は解決策を見いだしました:)最も簡単な方法でそれを修正しますが、それは動作します。ご協力ありがとうございます – Andurit

答えて

1

しかし、私は解決策がありますので、後で誰かを助けることを願っています。問題だった

私は私の窓はNODE.jsに設定.jsファイルを実行するには、既定のプログラムを持っており、それは当然のデフォルト設定ですので、すべての.jsファイルは、パラメータなしで開いていることに気づきました。

私の場合、すべて.jsファイルはNODEでオープンしていますが、PSPADなどのファイルで実行する代わりに、この基本的に開いているエディタで開くように変更しようとしています。どのように私はそれを修正でした

:(basicly .jsサフィックスを削除)

  1. 代わりの何かを直接実行するの.jsを使用して、私は私の./bin/index.jsバイナリファイルを作る
  2. 追加#!/usr/bin/env nodeindexファイルの上に
  3. package.jsonに移動し、すべての依存関係を./bin/index.jsに変更しました。./bin/index

Woala!それは働く:)

p.s.私が最初に言及したように、私は.jsでこれを実行するオプションがあると信じていましたが、私はそれを見つけることができませんでした。だから、誰かがそれが私に知らされるのを見いだすならば、是非。 ありがとう

関連する問題