Node.jsの依存関係が重すぎる


9

最近、node.jsで遊んだ。

今、そこにあるすべてのノードのチュートリアルでは、

npm init

そして、いくつかの標準的なサーバーフレームワークが必要だとすると、エクスプレスを選択するとします。

npm install express

しかし、ASP.NETのような世界から慣れ親しんでいる多くのものが必要になります。

テンプレートエンジン(jade)とスタイルシートプリプロセッサ(SASS)について話します。

そして、彼らはあなたに「gulp / gruntをインストールしてください。そうすれば、サーバーを最小化、醜化して実行することができ、他の多くのものを自動的に実行できます!」

そして、それはgulp、node-sass、gulp-sass、gulp-uglify、そしておそらくもっとクールなもの(tsdまたはbabel、markdownなど)をインストールすることを意味します...

しかし、それらすべては重いです、ディスクとプロジェクトます。同じことを問わず、すべてのノードモジュールが独自の依存関係を持っているため、10000以上のファイルは言うまでもなく、そのプロジェクト(まだ開始されていない!)の100 MB以上のディスクサイズで簡単に見つけることができます。依存関係は別のモジュールで使用されています。これは、Webサーバーはもちろんのこと、どこにでも移動するのが非常に困難です。

何か不足していますか?そのような明らかな欠陥が存在する間、ノード環境にそれほどの賞賛が与えられる可能性はないと思います。私が期待していることは多すぎます(結局、一度に多くのツールを使用しようとしたのですが)、ノードのベテランがこれを回避するために取るに足らないことはありますか?


2
完全に同意し、いくつかのフロントエンドプロジェクトのnpmツリーを見て驚いた。私は.netの世界では同じことをしていると思いますが、それらはすべてバイナリにコンパイルされているため、気付かないでしょう
Ewan

2
残念ながら、これは本当に具体的で答えられる質問ではないため、おそらく間もなく終了します。私があなたに言えることは、1)これらの追加ツールはすべて何かに役立つが、小さなプロジェクトはそれらのほとんどを必要としないだけである2)同様の機能を持つ他のすべてのプログラミングフレームワークには同じ量のものが付属する(見てJREまたは.NETのダウンロードで)、唯一の違いは、必要なものが「デフォルト」ディストリビューションの一部であり、他のパッケージで見つける必要がある量です。3)開発マシンで100 MBは何もない
Ixrec

1
@Ixrecもちろんその答えは、あなたがやった(またはしようとした):)。しかし、私はあなたの主張を主張することができます:1)これは小さなプロジェクトである必要はありません-独自のjsファイルとスタイルシートを持ついくつかのビューを持つプロジェクトを考えてください。これで、sass、cssnano、uglifyが必要になります。また、あなたがエクスプレス、ジェイド、そしてもう少し欲しいと思うのに十分です。2)私はそれほど重くなりませんでした(そしてどこにも多くのファイルがありませんでした)適切な.netプロジェクトを持っていました。3)多分現代の開発マシンはこれを簡単にとることができますが、それはサーバーにも重く、それはもう少し心配です。私が間違っている?
またはYaniv 2016年

2
@OrYaniv確かに、あなたは私のポイントを証明しているようなものです。これは議論できる種類の問題ですが、あまりに広範であり、実行しているプロジェクトと依存関係に大きく依存しすぎているため、答えられていません必要。ちなみに、チャットでの議論はまったく問題ありません。またはQuoraで。
Ixrec

3
node.jsの見事に肥大化した「オールオアナッシング」の世界へようこそ。これは、以前に使用したものよりも実際には簡単ではなく、また良くもありません。
Traubenfuchs 2016年

回答:


3

最近の左パッドの問題は、ノードでのこの傾向の問題の主な例です。依存しているものが多すぎると、すべてがカウパウになりやすく、プロジェクトのデバッグが困難になり、新規参入者にとっては言語の仕組みを理解することが難しくなります。

これで、優れたNode.jsプログラマーは、依存関係が関係する最小限のアプリケーションを書くことを知っています。依存しているものが少ないほど良いです。左側に文字列を埋め込む必要がありますか?ヘルパーでコーディングします。空白を含む11行のコードです。文字列の行に番号を付ける必要がありますか?コーディングしてください。コードは100行未満です。

プロジェクト管理のようなより複雑なタスクの場合でも、プロジェクトが十分に単純である間はMakefileに固執することをお勧めします。うなり声と一口は、非常に骨の折れる作業を必要とする巨大なプロジェクトに本当に役立ちます。しかし、あなたのSPAブログについては?Makefileを書いてください、それは5分かかり、あなたそれどのように機能するか知っています。

3行のコードを記述する必要があるたびにnpmを参照するだけの誘惑は素晴らしいですが、合理的である場合は常に抵抗する必要があります。3つのDOM操作がある場合はjQueryを含めないでください。その静的なプロモーションページにAngularを使用しないでください。単純なサーバーにExpressを使用しないでください。しかし、あなたはCMSをコーディングしていますか?jQuery、アンダースコアなどのパッケージを使用しないのはおかしいはずです。10のコレクション型、3つのdbを操作し、常にそれらにクエリを実行していますか?アンダースコアや他のいくつかを使用しないのはおかしいでしょう。「このパッケージをインストールすることで十分な時間を節約できますか?」または「30分ほどでこれをコーディングすることはできませんか?」


1
別のメモで、文字列に行番号を追加するには、実際に100行のJavascriptコードが必要ですか?
Robert Harvey

ははは、現実的な行番号付けの実装についてはあまり考えていませんでした。なぜなら、パッケージとしてはもちろんのこと、そのようなものが存在する必要性が本当に見えないからです。
BorisStoyanovv 2016年

あなたはおそらくそれを説得させるだけでそのラインのものを半分に切ることができるでしょう。本当に解決するのは簡単な問題です。(そして、それはスキームのような言語のワンライナーです、そしておそらく私はそれについて私が考えている今ではパイソンです)
Shayne
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.