Node.js npmモジュールを開発し、Windowsで開発しました。今日、私はいくつかのMochaテストを書きました。多くの闘争の後、npm test
働く、package.json
は次のように見えなければなりませんでした:(他のオプションがあるかもしれません???)
"scripts": { "test": "node node_modules/mocha/bin/mocha" }
すべてのUnixベースの本にあるものの代わりに、
"scripts": { "test": "./node_modules/.bin/mocha" }
Package.jsonをWindowsとUnixの両方で動作するように設定するにはどうすればよいですか? Travis-CIはUnixを実行していると想定しているため、ビルドをそれにリンクすると、Windowsバージョンで爆発します。
誰かがまさにこれのために機能を要求した2年前のスレッドを見つけました。そのスレッドは消滅したように見えた。この SOの質問 は近いように見えますが、私が望んでいるものとはまったく異なり、率直に言って、私は答えを理解できません。 :-(誰でも明確にできますか?
当分の間、私は行きます
"scripts": {
"test": "node node_modules/mocha/bin/mocha",
"testOnUnixUseThis" : "./node_modules/.bin/mocha (I think)",
"testOnWindowsUseThis" : "node node_modules/mocha/bin/mocha"
},
残念ながら、_npm test testOnWindowsUseThis
またはnpm testOnWindowsUseThis
。また、Travis-CIの問題は修正されません。しかし、少なくともモジュールをダウンロードした人は、(できれば)何が起こっているのかを見ることができます。
より良いアイデアはありますか?私はまだWindowsで開発している唯一の人ですか? :-)
常にnpm install -g mocha
またはnpm install mocha
を実行してから、追加するだけです。
"scripts": {
"test": "mocha spec"
}
package.jsonに。これは、すべての環境で機能する場合と機能しない場合があります。たとえば、ラインマンでは、bin/mochaを使用する必要があります。また、これを回避する方法が見つからない場合は、テストスクリプトをUnix用に設定してから、「wintest」またはWindowsで必要な処理を実行するスクリプトを追加します。スクリプトには任意の名前を付けることができます。デフォルトのもの(test、startなど)はnpm [command]
で使用できます。非標準のもの(wintestなど)はnpm run-script [command]
で使用できますが、引き続き機能します。
これがどのように/なぜ機能するのかについてのちょっとした裏話:
モジュールをグローバルにインストールすると、そのモジュールはPATH(または同等のWindowsのもの)で利用可能になります。プロジェクトの依存関係をインストールするときに、そのモジュールにバイナリがある場合、それらはnode_modules/.bin
にシンボリックリンクされ、npm run [some-command]
を実行すると、npmはnode_modules/.bin
をPATHに追加しますそのコマンド用。したがって、mochaがグローバルにインストールされると、"test": "mocha spec"
はグローバルにインストールされたmochaを使用してテストを実行します。プロジェクトの依存関係である場合、node_modules/.bin
にあるものを使用します。私がこれを見つけたのは、npmがnode_modules/.bin
をPATHのfrontに追加するため、ローカルバイナリが常にグローバルバイナリよりも優先されることです。 ほとんどの場合、これはあなたが望むものですが、それがどのように機能するかを知っておく価値があります(最近、これに関連するバグがありました)。
編集:
Npmの履歴のどの時点でこれが変更されたかはわかりませんが、npm run <script-name>
が動作するようになりました(npm run-script <script-name>
を行う必要はもうありません)。おそらくrun-script
は引き続き機能します。期待していますが、試したことはありません。
Package.jsonをWindowsとUnixの両方で動作するように設定するにはどうすればよいですか?
もし、あんたが
...これは実用的なソリューションです
"scripts": {
"test": "node node_modules/mocha/bin/mocha.js"
},
注:
node
を前に置いても害はなく、Windowsでも役立ちます(設定しない限り、.js拡張子は必ずしもnodejus実行可能ファイルに登録されません。テキストエディターを開くと、IDEまたは(さらに悪い)Windowsスクリプトホスト、Internet Explorer…)グローバルソリューションを使用しないでください。Mochaのメンバー say に従うことをお勧めします。
"scripts": {
"test": "node_modules/.bin/mocha -w"
},
使用する npm i mocha --save-dev
これにより、モジュールが開発の依存関係として保存され、npmはscripts
オブジェクト内で使用される実行可能ファイルを自動的にセットアップします。 package.jsonで定義されたスクリプトの外部で実行可能ファイルを使用する場合、グローバルにインストールすることもできますが、パッケージのバージョンが異なる可能性があることに注意してください。
グローバルにインストールするだけの場合、他の人がテストを実行しようとしても満足しません(標準のnpm test
)
6.x以降の新しいnpmバージョンの新しい方法では、global
モードでmochaをインストールする必要はありません。
"scripts": { "test": "npx mocha" }
npxは、新しいnpmインストールで自動的にインストールされます。 node_modules/.bin
または$ PATHからmocha
を検索します