Node
このリポジトリにおけるNodeの役割は狭いですが、重要な役割を担っています。markdownlintのgitフックは
npx --no-install markdownlint-cli2を実行し、package.json / package-lock.jsonに固定されたmarkdownlint-cli2
開発依存関係を解決します。PATH上のNodeが正しくない場合、そのフックは壊れ、コミットをブロックします。
WSL非インタラクティブシェルの罠(これが厄介)
ログインシェルはプロファイルを読み込み、バージョンマネージャー(nvm)をロードして、リポジトリのNodeをPATHに配置します。*
非インタラクティブ*シェル(スクリプト、バックグラウンドジョブ、ヘッドレスエージェントによって起動されたgitフック)は、その
プロファイルを読み込みません。そのため、npx/nodeは、WSL相互運用を介して到達したWindowsのNodeインストールを
LinuxのNodeの代わりに解決する可能性があります。すると、markdownlint(およびNodeベースのフック)は、間違ったNodeの下で
実行されるか、完全に失敗します。これは、スクリプトやバックグラウンドジョブからのみ発生し、ターミナルで手動でコミットする
場合には決して発生しません。
修正方法:スクリプトやバックグラウンドジョブからコミットまたはプッシュする前に、リポジトリのNodeをPATHに配置します。
正確な手順はreferences/wsl-node-path.mdにあります。
npmの衛生管理
package-lock.jsonからの再現可能なインストールには、npm installではなくnpm ciを使用します。依存関係の変更はロックファイルと一緒にコミットします。npx --no-install <tool>は、固定されたローカル開発依存関係を実行し、ネットワークから異なるバージョンを静かに取得することを拒否します。--no-installを維持してください。- Nodeのフットプリントは最小限に保ちます。このリポジトリは、意図的に1つの開発依存関係のみを提供します。依存関係の追加は、確認が必要な変更であり、反射的な行動ではありません。