NPM対Bower対Browserify対Gulp対Grunt対Webpack


1886

最も人気のあるJavaScriptパッケージマネージャー、バンドラー、タスクランナーに関する私の知識を要約しようとしています。私が間違っている場合は修正してください:

  • npmbowerはパッケージマネージャーです。依存関係をダウンロードするだけで、自分でプロジェクトを構築する方法がわかりません。彼らは何を知っていることは呼び出すことですwebpack/ gulp/ gruntすべての依存関係を取得した後。
  • bowerに似てnpmいますが、フラット化された依存関係ツリーを構築します(npm再帰的に行うのとは異なります)。意味npmが、(数回同じフェッチすることができる)、各依存性をフェッチに依存関係をbower手動でサブ依存性を含むことを期待。時々bowernpmフロントエンドとバックエンドでそれぞれ一緒に使用されます(フロントエンドで各メガバイトが重要になる場合があるため)。
  • gruntおよびgulp自動化することができる自動化、すべてのタスクランナー(すなわち、コンパイルCSS /サス、最適化画像は、バンドルを作成し、縮小化/ transpileこと)です。
  • gruntgulpmaven対、gradleまたは構成対コード)。Gruntは、個別の独立したタスクの構成に基づいており、各タスクはファイルを開いたり、処理したり、閉じたりします。Gulpは必要なコード量が少なく、Nodeストリームに基づいているため、パイプチェーンを構築して(同じファイルを再度開くことなく)高速化できます。
  • webpackwebpack-dev-server)-私にとっては、すべてのJS / CSSウォッチャーを忘れることができる変更のホットリロードを備えたタスクランナーです。
  • npm/ bower+プラグインはタスクランナーを置き換える場合があります。それらの機能は交差することが多いため、gulp/ grunt以上のnpmプラグインを使用する必要がある場合は、さまざまな影響があります。しかし、タスクランナーは複雑なタスクに適しています(たとえば、「ビルドごとに、バンドルを作成し、ES6からES5にトランスパイルし、すべてのブラウザーエミュレーターで実行し、スクリーンショットを作成し、ftp経由でドロップボックスにデプロイします」)。
  • browserifyブラウザのノードモジュールをパッケージ化できます。browserifynodeさんはrequire、実際にあるCommonJS対AMD

質問:

  1. webpack&とはwebpack-dev-server公式ドキュメントには、それがモジュールバンドラーであると記載されていますが、私にとってはそれは単なるタスクランナーです。違いは何ですか?
  2. どこで使用しbrowserifyますか?node / ES6インポートでも同じことはできませんか?
  3. するときは、使用するgulp/ gruntnpm+プラグイン?
  4. 組み合わせを使用する必要がある場合は例を提供してください

52
ロールアップを追加する時間?😝
gman

167
これは非常に合理的な質問です。擬似私のようなウェブ開発者は、毎週の形で実装されているすべてのパッケージを超えるつまずく...
サイモンDirmeier


41
@Fisherman私はこれに全く新しいのです、そしてそれは完全に
くだらない

13
@Fisherman私が読んだばかりの「推奨」コメントはさらに悪かった!D:私は、CSS / JSライブラリをいくつか使用する厄介な静的ページを構築したいだけで、それを一緒にコンパイルできるツールがあると便利です...いくつかのテンプレートエンジンに投入して、Ctrl-Cを少し休ませます。 / Ctrl-Vの指、そしてそれは完璧でしょう...そして、まだ何時間も、まだ道を見つけることを試みています...
David Stosik

回答:


1028

WebpackとBrowserify

WebpackとBrowserifyは、ほぼ同じジョブを実行します。つまり、ターゲット環境で使用するコードを処理します(主にブラウザーですが、Nodeなどの他の環境をターゲットにすることもできます)。このような処理の結果、1つ以上のバンドルが作成されます。ターゲット環境に適したアセンブルされたスクリプトです。

たとえば、モジュールに分割されたES6コードを記述し、それをブラウザーで実行できるようにしたいとします。それらのモジュールがノードモジュールである場合、それらはノード環境にのみ存在するため、ブラウザはそれらを理解しません。ES6モジュールは、IE11などの古いブラウザーでも機能しません。さらに、ブラウザーがまだ実装していない実験的な言語機能(ES次の提案)を使用した可能性があるため、そのようなスクリプトを実行するとエラーがスローされるだけです。WebpackやBrowserifyなどのツールは、このようなコードをブラウザが実行できる形式に変換することでこれらの問題を解決ます。その上、それらはそれらのバンドルに非常に多様な最適化を適用することを可能にします。

ただし、WebpackとBrowserifyは多くの点で異なります。Webpackはデフォルトで多くのツール(コード分割など)を提供しますが、Browserifyはプラグインをダウンロードした後にのみこれを実行できますが、両方を使用すると非常に似た結果になります。それは個人的な好みに帰着します(Webpackの方が流行です)。ところで、Webpackはタスクランナーではなく、ファイルのプロセッサー(いわゆるローダーとプラグインによってファイルを処理する)にすぎず、タスクランナーによって(他の方法で)実行できます。


Webpack開発サーバー

Webpack Dev Serverは、Browsersyncと同様のソリューションを提供します。開発サーバーは、作業中にアプリを迅速に展開し、開発の進行状況をすぐに確認できます。開発サーバーは、コードの変更時にブラウザーを自動的に更新するか、変更されたコードを伝達します。いわゆるホットモジュールの置き換えにより、リロードせずにブラウザに


タスクランナーとNPMスクリプト

私は簡潔さと簡単なタスク作成のためにGulpを使用してきましたが、後でGulpもGruntもまったく必要ないことがわかりました。NPMスクリプトを使用してAPIを介してサードパーティツールを実行することで、私が必要とするすべてのものを実行できたはずです。Gulp、Grunt、またはNPMスクリプトのどちらを選択するかは、チームの好みと経験に依存します。

GulpやGruntのタスクはJSにあまり慣れていない人でも読みやすいですが、必要なことを学び、習得するもう1つのツールであり、個人的には依存関係を絞り込み、物事を簡単にすることを好みます。一方で、これらのタスクをNPMスクリプトとそれらのサードパーティツールを実行する(おそらくJS)スクリプトの組み合わせ(たとえば、ノードスクリプトの構成とクリーニングのためのrimrafの実行)に置き換えることは、より困難な場合があります。しかし、ほとんどの場合、これらの3つの結果は同じです。


例については、このReactスタータープロジェクトをご覧になることをお勧めします。これは、ビルドプロセスとデプロイプロセス全体をカバーするNPMスクリプトとJSスクリプトのすばらしい組み合わせを示しています。これらのNPMスクリプトはpackage.json、ルートフォルダーのという名前のプロパティにありますscripts。そこでは主にのようなコマンドに遭遇しますbabel-node tools/run start。Babel-nodeはCLIツール(本番用ではありません)であり、最初にES6ファイルtools/run(toolsにあるrun.jsファイル)をコンパイルします -基本的にランナーユーティリティです。このランナーは関数を引数として取り、それを実行します。この場合はstart-別のユーティリティ(start.js)ソースファイル(クライアントとサーバーの両方)のバンドル、およびアプリケーションと開発サーバーの起動(開発サーバーは、おそらくWebpack開発サーバーまたはBrowsersyncのいずれかになります)を担当します。

より正確に言えばstart.js、クライアント側とサーバー側の両方のバンドルを作成し、高速サーバーを起動し、正常に起動した後、ブラウザー同期を初期化します。これは、執筆時点では次のようになっています(最新のコードについては、スタータープロジェクトの反応を参照してください)。

const bs = Browsersync.create();  
bs.init({
      ...(DEBUG ? {} : { notify: false, ui: false }),

      proxy: {
        target: host,
        middleware: [wpMiddleware, ...hotMiddlewares],
      },

      // no need to watch '*.js' here, webpack will take care of it for us,
      // including full page reloads if HMR won't work
      files: ['build/content/**/*.*'],
}, resolve)

重要な部分はproxy.target、プロキシするサーバーアドレス(http:// localhost:3000など)を設定する場所であり、Browsersyncはhttp:// localhost:3001でリッスンするサーバーを起動し、生成されたアセットは自動変更で提供されます検出とホットモジュール交換。ご覧のとおりfiles、個々のファイルまたはパターンを持つ別の構成プロパティがあり、ブラウザー同期は変更を監視し、何かが発生した場合はブラウザーをリロードしますが、コメントにあるように、Webpackはjsソース自体をHMRで監視するので、それらは連携しますそこ。

今、私はそのようなGruntまたはGulp構成の同等の例はありませんが、Gulp(およびGruntと多少似ています)では、次のようにgulpfile.jsに個々のタスクを記述します。

gulp.task('bundle', function() {
  // bundling source files with some gulp plugins like gulp-webpack maybe
});

gulp.task('start', function() {
  // starting server and stuff
});

スターターキットと基本的にほぼ同じことを行う場所ですが、今回はタスクランナーを使用して、いくつかの問題を解決しますが、独自の問題と使用法の学習中にいくつかの困難をもたらします。依存関係が多ければ多いほど、失敗する可能性が高くなります。そして、それが私がそのようなツールを取り除くのが好きな理由です。


3
すばらしい答えです!ブラウザでwebpack / browserifyがどのように再利用ノードモジュールを管理する方法でplsを説明できますか?
VB_

4
Webpackは、依存関係(エクスポートされたモジュール値)をオブジェクト(installedModules)にアセンブルします。したがって、各モジュールはそのオブジェクトのプロパティであり、そのようなプロパティの名前はそのIDを表します(例:1、2、3など)。ソースでそのようなモジュールが必要になるたびに、webpackは値を引数にモジュールIDを含む関数呼び出しに変換します(例:__webpack_require __(1))。これにより、モジュールIDによるinstalledModulesの検索に基づいて適切な依存関係が返されます。Browserifyでの処理方法がわかりません。
DanMacák、2016年

@DanSkočdopoleさらに詳しく説明できますか?
Asim KT

1
私はgulpまたはgruntの基本的な使用法を提示することに同意しません。これら2つはgoogleを使用して簡単に比較できます。webpack-dev-serverは最初にwebpackを理解する必要があり、それはこの質問/回答の範囲外ですが、私は提示しました一部のBrowsersync構成。スターターキットは正しいので、詳しく説明しました。
DanMacák、2016

5
+1は、すべての新しいパッケージを使用する必要があるという(より)一般的な意見に従うのではなく、物事をシンプルに保つために依存関係を減らすためです。
マダンヌ2017年

675

2018年10月の更新

フロントエンド開発についてまだ不明な点がある場合は、ここで優れたリソースを簡単に確認できます。

https://github.com/kamranahmedse/developer-roadmap

2018年6月の更新

最初からJavaScriptを使用していなければ、最新のJavaScriptを学ぶのは大変です。あなたが新しい人なら、より良い概観を得るためにこの優れた文書をチェックすることを忘れないでください。

https://medium.com/the-node-js-collection/modern-javascript-explained-for-dinosaurs-f695e9747b70

2017年7月の更新

最近、2017年のフロントエンド開発への取り組み方について、Grabチームから非常に包括的なガイドを見つけました。以下のように確認できます。

https://github.com/grab/front-end-guide


世の中にはたくさんのツールがあり、それぞれが異なる面で私たちに利益をもたらすので、私はかなり長い間これも探していました。コミュニティはのようなツールに分かれていますBrowserify, Webpack, jspm, Grunt and Gulp。についても聞こえるかもしれませんYeoman or Slush。それは実際には問題ではなく、明確な道筋を理解しようとするすべての人を混乱させるだけです。

とにかく何か貢献したいです。

1.パッケージマネージャー

パッケージマネージャーは、次のようなライブラリであるプロジェクトの依存関係のインストールと更新を簡素化jQuery, Bootstrapします。

すべてのライブラリWebサイトの閲覧、アーカイブのダウンロードと解凍、ファイルのプロジェクトへのコピー—これらはすべて、ターミナルのいくつかのコマンドで置き換えられます。

  • NPMNode JS package manager、ソフトウェアが依存するすべてのライブラリを管理するのに役立ちます。呼び出すファイルでニーズを定義し、コマンドラインでpackage.json実行npm installします。その後、パッケージがダウンロードされ、使用できるようになります。front-end and back-endライブラリの両方に使用できます。

  • Bower:フロントエンドパッケージ管理の場合、概念はNPMと同じです。すべてのライブラリはという名前のファイルに保存され、コマンドラインでbower.json実行さbower installれます。

最大の違いBowerとは、NPMバウアーは、以下のようにフラットな依存関係ツリーを必要としながら、NPMは、ネストされた依存関係ツリーを行うということです。

引用バウアーとNPMとの違いは何ですか?

NPM

project root
[node_modules] // default directory for dependencies
 -> dependency A
 -> dependency B
    [node_modules]
    -> dependency A

 -> dependency C
    [node_modules]
    -> dependency B
      [node_modules]
       -> dependency A 
    -> dependency D

バウアー

project root
[bower_components] // default directory for dependencies
 -> dependency A
 -> dependency B // needs A
 -> dependency C // needs B and D
 -> dependency D

にいくつかの更新がありnpm 3 Duplication and Deduplicationます。詳細については、ドキュメントを開いてください。

  • Yarn:最近JavaScript 公開されたの新しいパッケージマネージャ。また、Yarnを使用すると、とレジストリの両方を使用してパッケージをフェッチできます。以前にパッケージをインストールしたことがある場合は、を容易にするキャッシュコピーを作成します。FacebookNPMNPMBoweryarnoffline package installs

  • jspm:はSystemJS、動的ES6モジュールローダーの上に構築されたユニバーサルモジュールローダーのパッケージマネージャーです。独自のルールセットを備えた完全に新しいパッケージマネージャーではなく、既存のパッケージソースの上で動作します。そのままの状態でGitHub、およびで動作しnpmます。Bowerベースのパッケージのほとんどはに基づいGitHubているため、これらのパッケージもを使用しjspmてインストールできます。簡単にインストールできるように、よく使用されるフロントエンドパッケージのほとんどをリストするレジストリがあります。

間で異なる参照してくださいBowerjspmパッケージマネージャを:JSPM対バウアー


2.モジュールローダー/バンドル

あらゆる規模のほとんどのプロジェクトでは、コードが複数のファイルに分割されます。各ファイルに個別の<script>タグを含めるだけで<script>、新しいhttp接続が確立されます。また、モジュール化の目標である小さなファイルの場合、接続のセットアップに、データの転送よりも大幅に時間がかかる場合があります。スクリプトのダウンロード中は、ページのコンテンツを変更できません。

  • ダウンロード時間の問題は、単純なモジュールのグループを1つのファイルに連結し、それを縮小することでほぼ解決できます。

例えば

<head>
    <title>Wagon</title>
    <script src=“build/wagon-bundle.js”></script>
</head>
  • ただし、パフォーマンスは柔軟性を犠牲にして得られます。モジュールに相互依存関係がある場合、この柔軟性の欠如が問題の原因となる可能性があります。

例えば

<head>
    <title>Skateboard</title>
    <script src=“connectors/axle.js”></script>
    <script src=“frames/board.js”></script>
    <!-- skateboard-wheel and ball-bearing both depend on abstract-rolling-thing -->
    <script src=“rolling-things/abstract-rolling-thing.js”></script>
    <script src=“rolling-things/wheels/skateboard-wheel.js”></script>
    <!-- but if skateboard-wheel also depends on ball-bearing -->
    <!-- then having this script tag here could cause a problem -->
    <script src=“rolling-things/ball-bearing.js”></script>
    <!-- connect wheels to axle and axle to frame -->
    <script src=“vehicles/skateboard/our-sk8bd-init.js”></script>
</head>

コンピューターはそれをあなたができるよりも上手に行うことができます。そのため、ツールを使用してすべてを1つのファイルに自動的にバンドルする必要があります。

その後、我々は話を聞いたRequireJSBrowserifyWebpackおよびSystemJS

  • RequireJS:はJavaScriptファイルおよびモジュールのローダーです。ブラウザ内での使用に最適化されていますが、などの他のJavaScript環境でも使用できますNode

例:myModule.js

// package/lib is a dependency we require
define(["package/lib"], function (lib) {

    // behavior for our module
    function foo() {
        lib.log( "hello world!" );
    }

    // export (expose) foo to other modules as foobar
    return {
        foobar: foo
    }
});

ではmain.jsmyModule.js依存関係としてインポートして使用できます。

require(["package/myModule"], function(myModule) {
    myModule.foobar();
});

そして、では、HTMLでの使用を参照できますRequireJS

<script src=“app/require.js data-main=“main.js ></script>

詳細読むCommonJSAMD簡単に理解を取得します。 CommonJS、AMD、およびRequireJSの関係は?

  • BrowserifyCommonJSブラウザでフォーマットされたモジュールの使用を許可するように設定します。したがって、Browserifyはモジュールローダーほどのモジュールローダーではありません。Browserify完全にビルド時のツールであり、クライアント側にロードできるコードのバンドルを生成します。

node&npmがインストールされているビルドマシンから始めて、パッケージを取得します。

npm install -g save-dev browserify

モジュールをCommonJSフォーマットで書く

//entry-point.js
var foo = require('../foo.js');
console.log(foo(4));

そして満足したら、コマンドを発行してバンドルします。

browserify entry-point.js -o bundle-name.js

Browserifyは、エントリポイントのすべての依存関係を再帰的に検出し、それらを単一のファイルにアセンブルします。

<script src=”bundle-name.js”></script>
  • WebpackJavaScript画像、CSS などを含むすべての静的アセットを1つのファイルにバンドルします。また、さまざまなタイプのローダーを介してファイルを処理することもできます。JavaScriptwith CommonJSまたはAMDmodules構文を記述できます。ビルドの問題を根本的により統合的かつ独断的に攻撃します。ではBrowserify、あなたの使用Gulp/Gruntして仕事を得るために変換し、プラグインの長いリスト。Webpack箱から出して、通常は必要としないGruntかまったく必要としない十分なパワーを提供しますGulp

基本的な使い方は単純ではありません。BrowserifyのようなWebpackをインストールします。

npm install -g save-dev webpack

そして、コマンドにエントリポイントと出力ファイルを渡します。

webpack ./entry-point.js bundle-name.js
  • SystemJS:は、今日使用されている一般的な形式のいずれかで実行時にモジュールをインポートできるモジュールローダーです(CommonJS, UMD, AMD, ES6)。これは、ES6モジュールローダーポリフィルの上に構築されており、使用されているフォーマットを検出して適切に処理するのに十分スマートです。SystemJSES6コード(BabelまたはTraceur)や、TypeScriptおよびなどの他の言語もトランスパイルできます。CoffeeScriptプラグインを使用。

node moduleそれが何であり、なぜそれがブラウザ内にうまく適合していないのか知りたいです。

より有用な記事:


なぜjspmそしてSystemJS

主な目標の一つES6モジュール性は、(インターネット上のどこからでも任意のJavaScriptライブラリをインストールして使用することが本当に簡単にすることですGithubnpmなど、)。必要なものは2つだけです。

  • ライブラリをインストールする単一のコマンド
  • ライブラリをインポートして使用するための1行のコード

だから jspm、あなたはそれを行うことができます。

  1. コマンドを使用してライブラリをインストールします。 jspm install jquery
  2. 1行のコードでライブラリをインポートします。HTMLファイル内で外部参照する必要はありません。

display.js

var $ = require('jquery'); 

$('body').append("I've imported jQuery!");
  1. 次にSystem.config({ ... })、モジュールをインポートする前に、これらを構成します。通常、実行jspm initすると、という名前のファイルがありますconfig.jsこの目的のために。

  2. これらのスクリプトを実行させるために、我々は負荷に必要system.jsconfig.jsHTMLページに。その後display.jsSystemJSモジュールローダーを使用してファイルをロードします。

index.html

<script src="jspm_packages/system.js"></script>
<script src="config.js"></script>
<script>
  System.import("scripts/display.js");
</script>

注意:Angular 2が適用しているのでnpmwith Webpackを使用することもできます。jspmと統合するために開発されてSystemJSおり、既存のnpmソースの上で動作するため、答えはあなた次第です。


3.タスクランナー

タスクランナーとビルドツールは、主にコマンドラインツールです。それらを使用する必要がある理由:一言で言えば、自動化縮小、コンパイル、単体テスト、リンティングなどの反復的なタスクを実行するときに以前はコマンドラインや手動で行うのに多くの時間を要したため、実行する必要のある作業が少なくなります。

  • Grunt:開発環境の自動化を作成してコードを前処理したり、構成ファイルを使用してビルドスクリプトを作成したりできますが、複雑なタスクを処理することは非常に難しいようです。過去数年間人気があります。

のすべてのタスクGruntは、さまざまなプラグイン構成の配列であり、厳密に独立したシーケンシャルな方法で、単純に次々と実行されます。

grunt.initConfig({
  clean: {
    src: ['build/app.js', 'build/vendor.js']
  },

  copy: {
    files: [{
      src: 'build/app.js',
      dest: 'build/dist/app.js'
    }]
  }

  concat: {
    'build/app.js': ['build/vendors.js', 'build/app.js']
  }

  // ... other task configurations ...

});

grunt.registerTask('build', ['clean', 'bower', 'browserify', 'concat', 'copy']);
  • Gulp:自動化Gruntは構成と同じですがJavaScript、ノードアプリケーションのようにストリームで書き込むことができます。最近好む。

これはGulpサンプルのタスク宣言です。

//import the necessary gulp plugins
var gulp = require('gulp');
var sass = require('gulp-sass');
var minifyCss = require('gulp-minify-css');
var rename = require('gulp-rename');

//declare the task
gulp.task('sass', function(done) {
  gulp.src('./scss/ionic.app.scss')
    .pipe(sass())
    .pipe(gulp.dest('./www/css/'))
    .pipe(minifyCss({
      keepSpecialComments: 0
    }))
    .pipe(rename({ extname: '.min.css' }))
    .pipe(gulp.dest('./www/css/'))
    .on('end', done);
});

詳細:https : //medium.com/@preslavrachev/gulp-vs-grunt-why-one-why-the-other-f5d3b398edc4#.fte0nahri


4.足場ツール

  • Slush and Yeoman:それらを使用してスタータープロジェクトを作成できます。たとえば、HTMLとSCSSを使用してプロトタイプを作成し、手動でscss、css、img、フォントなどのフォルダーを作成することを計画しているとします。あなたはただインストールすることができますyeoman簡単なスクリプトをして実行するです。次に、すべてがここにあります。

詳細はこちら

npm install -g yo
npm install --global generator-h5bp
yo h5bp

詳細:https : //www.quora.com/What-are-the-differences-between-NPM-Bower-Grunt-Gulp-Webpack-Browserify-Slush-Yeoman-and-Express


私の回答は質問の内容と実際には一致していませんが、Googleでこれらの知識を検索しているときは常に質問が一番上に表示されるため、要約して回答することにしました。お役に立てば幸いです。


64

わかりました、それらはすべていくつかの類似点を持っています、それらはあなたのために異なる似た方法であなたのために同じことをします、私はそれらを以下のように3つの主要なグループに分けます:


1)モジュールバンドラー

人気のあるものとしてwebpackとbrowserifyを使用すると、タスクランナーのように機能しますが、設定としてすべてをまとめてバンドルするので、CSSとJavaScriptを含む1つのファイルでbundle.jsとして結果を指すことができます。それぞれの詳細については、以下の詳細をご覧ください。

ウェブパック

webpackは、最新のJavaScriptアプリケーション用のモジュールバンドルです。webpackがアプリケーションを処理するとき、アプリケーションが必要とするすべてのモジュールを含む依存関係グラフを再帰的に構築し、それらのすべてのモジュールを少数のバンドル(多くの場合1つだけ)にパッケージ化して、ブラウザーでロードします。

信じられないほど構成可能ですが、開始するには、4つのコアの概念(エントリー、出力、ローダー、プラグイン)を理解するだけで済みます。

このドキュメントは、詳細なコンセプト固有の使用例へのリンクを提供しながら、これらのコンセプトの概要を説明することを目的としています。

もっとここに

browserify

Browserifyは、ブラウザーで使用するためにコンパイルするnode.jsスタイルのモジュールを作成できる開発ツールです。ノードと同じように、モジュールを別々のファイルに書き込み、module.exportsを使用して外部メソッドとプロパティをエクスポートし、変数をエクスポートします。require関数を使用して他のモジュールを要求することもできます。相対パスを省略すると、node_modulesディレクトリ内のモジュールに解決されます。

もっとここに


2)タスクランナー

gulpとgruntはタスクランナーです。基本的にはタスクランナーがタスクを作成し、いつでも実行できます。たとえば、CSSを縮小するプラグインをインストールし、毎回実行して縮小を行うと、それぞれの詳細が表示されます。

むしゃむしゃ

gulp.jsは、Fractal InnovationsおよびGitHubのオープンソースコミュニティによるオープンソースのJavaScriptツールキットであり、フロントエンドWeb開発のストリーミングビルドシステムとして使用されます。Node.jsとNode Package Manager(npm)に基づいて構築されたタスクランナーであり、縮小、連結、キャッシュの無効化、ユニットテスト、リンティング、最適化など、Web開発に関連する時間のかかる反復的なタスクの自動化に使用されます。gulpの使用そのタスクを定義し、小さな、単一目的のプラグインに依存してそれらを実行する、コードオーバー構成アプローチ。gulpエコシステムには、選択可能な1000以上のプラグインが用意されています。

もっとここに

うなり声

GruntはJavaScriptタスクランナーであり、縮小、コンパイル、単体テスト、リンティングなどの頻繁に使用されるタスクを自動的に実行するために使用されるツールです。コマンドラインインターフェイスを使用して、ファイル(Gruntfileと呼ばれる)で定義されたカスタムタスクを実行します。GruntはBen Almanによって作成され、Node.jsで記述されています。npm経由で配布されます。現在、Gruntエコシステムでは5000を超えるプラグインを利用できます。

もっとここに


3)パッケージマネージャー

パッケージマネージャーは、アプリケーションで必要なプラグインを管理し、githubなどからpackage.jsonを使用してそれらをインストールします。モジュールの更新、インストール、アプリの共有に非常に便利です。それぞれの詳細:

npm

npmは、JavaScriptプログラミング言語用のパッケージマネージャーです。これは、JavaScriptランタイム環境Node.jsのデフォルトのパッケージマネージャーです。これは、npmとも呼ばれるコマンドラインクライアントと、npmレジストリと呼ばれるパブリックパッケージのオンラインデータベースで構成されています。レジストリはクライアントを介してアクセスされ、利用可能なパッケージはnpm Webサイトを介して参照および検索できます。

もっとここに

Bowerは、HTML、CSS、JavaScript、フォント、さらには画像ファイルを含むコンポーネントを管理できます。Bowerは、コードを連結または縮小したり、その他のことを行ったりしません。必要なパッケージの適切なバージョンとその依存関係をインストールするだけです。始めに、Bowerはあらゆる場所からパッケージをフェッチしてインストールし、探しているものを探して見つけ、ダウンロードし、保存する作業を行います。Bowerは、これらのパッケージをマニフェストファイルbower.jsonで追跡します。

もっとここに

そして見逃してはならない最新のパッケージマネージャー、それは実際の作業環境では若くて高速で、以前に主に使用していたnpmに比べて、モジュールを再インストールするために、node_modulesフォルダーをダブルチェックしてモジュールの存在をチェックします、また、モジュールのインストールにかかる時間が短いようです:

糸はあなたのコードのパッケージマネージャーです。コードを使用して、世界中の他の開発者とコードを共有できます。糸はこれを迅速、安全、確実に行うので、心配する必要はありません。

Yarnを使用すると、さまざまな問題に対する他の開発者のソリューションを使用して、ソフトウェアの開発が容易になります。問題がある場合は、問題を報告したり、貢献したりできます。問題が修正されたら、Yarnを使用してすべてを最新の状態に保つことができます。

コードは、パッケージと呼ばれるもの(モジュールと呼ばれることもあります)を介して共有されます。パッケージには、共有されているすべてのコードと、パッケージを説明するpackage.jsonファイルが含まれています。

もっとここに



gulpプラグインのリストはありますか?本当に1000以上ありますか?npmは20ほどしか返さないのですか?
フルビウス2017

1
素晴らしい要約。現代のウェブ開発についての議論の入り口となるはずです。
Adam Bubela

1
@flurbiusはい、こちら:gulpjs.com/plugins。現在、3,465のGulpプラグインがあるようです。
mts knn 2018年

52

npmcompareでいくつかの技術的な比較を見つけることができます

browserify、grunt、gulp、webpackの比較

ご覧のとおり、webpackは非常によくメンテナンスされており、平均して4日ごとに新しいバージョンがリリースされます。しかし、Gulpはそれらすべての中で最大のコミュニティーを持っているようです(Githubに2万を超える星がいる)Gruntは少し無視されているようです(他のものと比較して)。

だから、どちらかを選ぶ必要があるなら、私はGulpで行くでしょう


5
webpackは、Githubで26kで起動し、25.7kで起動します。人気要因を使用して決定することはもうできません...
Rayee Roded 2017年


14

webpack&webpack-dev-serverとは何ですか?公式ドキュメントには、それがモジュールバンドラーであると記載されていますが、私にとってはそれは単なるタスクランナーです。違いは何ですか?

webpack-dev-serverは、Webpack開発者が彼らが何をすべきかを即座にフィードバックを得るために使用するライブのリロードWebサーバーです。開発時にのみ使用してください。

このプロジェクトは、nof5単体テストツールに大きく影響を受けています。

名前が示すようにWebpackは、WebのSINGLE パック時代を作成します。パッケージは最小化され、1つのファイルに結合されます(まだHTTP 1.1時代に住んでいます)。Webpackは、リソース(JavaScript、CSS、画像)を組み合わせて、次のように注入するという魔法を行います<script src="assets/bundle.js"></script>

モジュールの依存関係、および依存関係を取得してそれらをバンドルする方法を理解する必要があるため、モジュールバンドルとも呼ばれます

browserifyはどこで使用しますか?node / ES6インポートでも同じことはできませんか?

Webpackを使用するのとまったく同じタスクでBrowserifyを使用できます。– ただし、Webpackの方がコンパクトです。

Webpack2のES6モジュールローダー機能System.importを使用していることに注意してください。これは、単一のブラウザーがネイティブでサポートするものではありません。

いつnpm +プラグインでgulp / gruntを使用しますか?

Gulp、Grunt、Brokoli、Brunch、Bower忘れられ ます。代わりに、直接NPMコマンドラインスクリプトを使用して、あなたがのためにここにこのような追加パッケージを排除することができますガルプ

var gulp        = require('gulp'),
  minifyCSS     = require('gulp-minify-css'),
  sass          = require('gulp-sass'),
  browserify    = require('gulp-browserify'),
  uglify        = require('gulp-uglify'),
  rename        = require('gulp-rename'),
  jshint        = require('gulp-jshint'),
  jshintStyle   = require('jshint-stylish'),
  replace       = require('gulp-replace'),
  notify        = require('gulp-notify'),

プロジェクトの構成ファイルを作成するときは、おそらくGulpおよびGrunt構成ファイルジェネレーターを使用できます。この方法では、Yeomanまたは同様のツールをインストールする必要はありません。


14

ヤーンは、おそらく言及するに値する最近のパッケージマネージャーです。
だから、ここにあります:https : //yarnpkg.com/

私の知る限り、それはnpmとbowerの両方の依存関係をフェッチでき、他の高く評価されている機能があります。


12

Webpackバンドラーです。同様Browserfyに、コードベースでモジュール要求(requireまたはimport)を探し、再帰的に解決します。さらに、WebpackJavaScriptのようなモジュールだけでなく、CSS、画像、HTMLなど、文字通りすべてを解決するように構成できます。特に私がワクワクWebpackするのは、コンパイルされたモジュールと動的に読み込まれたモジュールの両方を同じアプリで組み合わせることができることです。したがって、特にHTTP / 1.xを介して、実際のパフォーマンスが向上します。もしあなたが、それは私がここで例を挙げて説明するにはどうすればよい正確http://dsheiko.com/weblog/state-of-javascript-modules-2017/ バンドラするための代替として1を考えることができますRollup.jshttps://rollupjs.org/)コンパイル時にコードを最適化しますが、見つかった未使用のチャンクをすべて削除します。

の場合AMDRequireJSネイティブES2016 module systemではなく、System.jshttps://github.com/systemjs/systemjs)でロードできます

さらに、やのnpmような自動化ツールとしてよく使用されることを指摘します。https://docs.npmjs.com/misc/scriptsを確認してください。私は今、個人的には他の自動化ツールを避けてnpmスクリプトだけを使いますが、以前はにとても夢中になりました。他のツールでは、パッケージ用の無数のプラグインに依存する必要があります。これは、多くの場合、適切に記述されておらず、アクティブに維持されていません。はそのパッケージを知っているので、ローカルにインストールされたパッケージを次のような名前で呼び出します。gruntgulpgruntnpm

{
  "scripts": {
    "start": "npm http-server"
  },
  "devDependencies": {
    "http-server": "^0.10.0"
  }
}

実際、パッケージがCLIをサポートしている場合、原則としてプラグインは必要ありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.