watchify vs onchange vs nodemon vs npm-watch
Node.js 開発ツール
watchifyonchangenodemonnpm-watch類似パッケージ:

Node.js 開発ツール

Node.js 開発ツールは、開発者がアプリケーションの開発プロセスを効率化し、リアルタイムでの変更を監視するためのパッケージです。これらのツールは、コードの変更を自動的に検出し、必要に応じてアプリケーションを再起動したり、ビルドプロセスをトリガーしたりすることで、開発の生産性を向上させます。これにより、開発者は手動での再起動やビルドを行う必要がなくなり、よりスムーズな開発体験を提供します。

npmのダウンロードトレンド

3 年

GitHub Starsランキング

統計詳細

パッケージ
ダウンロード数
Stars
サイズ
Issues
公開日時
ライセンス
watchify692,8751,791-385年前MIT
onchange286,414829-65年前MIT
nodemon026,694219 kB915日前MIT
npm-watch033214.6 kB182年前MIT

機能比較: watchify vs onchange vs nodemon vs npm-watch

自動再起動機能

  • watchify:

    Watchifyは、JavaScriptファイルの変更を監視し、変更があった場合に自動的に再バンドルを行います。これにより、開発者はブラウザでの変更を即座に確認できます。

  • onchange:

    Onchangeは、特定のファイルやディレクトリに変更があった場合に、任意のコマンドを実行します。これにより、開発者は特定のファイルの変更に応じてカスタムアクションを実行できます。

  • nodemon:

    Nodemonは、Node.jsアプリケーションのファイルが変更された際に自動的にアプリケーションを再起動します。これにより、開発者は変更を加えるたびに手動でサーバーを再起動する必要がなくなります。

  • npm-watch:

    npm-watchは、指定したタスクを監視し、変更があった場合にそれを再実行します。これにより、開発者はビルドやテストを自動化し、効率的に作業できます。

設定の柔軟性

  • watchify:

    Watchifyは、ブラウザ向けのバンドル作業を効率化するために設計されており、設定が簡単で、開発者が迅速に作業を開始できるようにします。

  • onchange:

    Onchangeは、コマンドラインから簡単に設定でき、特定のファイルやディレクトリに対して柔軟に監視を行えます。これにより、開発者は必要な監視を簡単に設定できます。

  • nodemon:

    Nodemonは、設定ファイルを使用して監視するファイルの種類や再起動の条件を柔軟に設定できます。これにより、特定のニーズに合わせたカスタマイズが可能です。

  • npm-watch:

    npm-watchは、複数のタスクを同時に監視できるため、複雑なビルドプロセスを簡単に管理できます。設定ファイルを通じて、監視するタスクを自由に設定できます。

パフォーマンス

  • watchify:

    Watchifyは、変更があった場合にのみ再バンドルを行うため、開発中のビルド時間を大幅に短縮します。

  • onchange:

    Onchangeは、変更があったファイルに対してのみコマンドを実行するため、無駄な処理を避け、パフォーマンスを向上させます。

  • nodemon:

    Nodemonは、変更があった際にのみアプリケーションを再起動するため、無駄な再起動を避けることができます。これにより、開発中のパフォーマンスが向上します。

  • npm-watch:

    npm-watchは、タスクを効率的に監視し、必要な時にのみ再実行するため、全体的なビルド時間を短縮します。

学習曲線

  • watchify:

    Watchifyは、ブラウザ向けのバンドルツールとして、基本的な使い方を理解するのが簡単です。

  • onchange:

    Onchangeは、コマンドラインツールとして直感的に使用できるため、学習曲線は比較的緩やかです。

  • nodemon:

    Nodemonは非常にシンプルで、Node.jsの基本的な知識があればすぐに使い始めることができます。

  • npm-watch:

    npm-watchは、npmスクリプトを使用するため、npmに慣れている開発者にとっては学習が容易です。

コミュニティとサポート

  • watchify:

    Watchifyは、ブラウザ向けのバンドルツールとして広く知られており、活発なコミュニティが存在します。

  • onchange:

    Onchangeは、シンプルなツールであるため、コミュニティも小さいですが、基本的なサポートは受けられます。

  • nodemon:

    Nodemonは広く使用されており、活発なコミュニティが存在します。ドキュメントも充実しているため、問題解決が容易です。

  • npm-watch:

    npm-watchも人気があり、利用者が多いため、サポートや情報が豊富です。

選び方: watchify vs onchange vs nodemon vs npm-watch

  • watchify:

    Watchifyは、ブラウザ向けのバンドル作業を最適化したい場合に選択すべきです。特に、JavaScriptファイルをバンドルし、変更があった際に自動的に再バンドルを行いたい場合に最適です。

  • onchange:

    Onchangeは、特定のファイルやディレクトリに対する変更を監視し、カスタムコマンドを実行したい場合に適しています。特に、フロントエンドの開発でファイルの変更に応じてビルドやリロードを行いたい場合に便利です。

  • nodemon:

    Nodemonは、Node.jsアプリケーションの自動再起動を必要とする場合に最適です。特に、サーバーサイドの開発中にコードの変更を即座に反映させたい場合に便利です。

  • npm-watch:

    npm-watchは、複数のタスクを同時に監視したい場合に選択すべきです。特に、ビルドプロセスやテストの実行を自動化したい場合に有用です。

watchify のREADME

watchify

watch mode for browserify builds

build status

Update any source file and your browserify bundle will be recompiled on the spot.

example

$ watchify main.js -o static/bundle.js

Now as you update files, static/bundle.js will be automatically incrementally rebuilt on the fly.

The -o option can be a file or a shell command (not available on Windows) that receives piped input:

watchify main.js -o 'exorcist static/bundle.js.map > static/bundle.js' -d
watchify main.js -o 'uglifyjs -cm > static/bundle.min.js'

You can use -v to get more verbose output to show when a file was written and how long the bundling took (in seconds):

$ watchify browser.js -d -o static/bundle.js -v
610598 bytes written to static/bundle.js (0.23 seconds) at 8:31:25 PM
610606 bytes written to static/bundle.js (0.10 seconds) at 8:45:59 PM
610597 bytes written to static/bundle.js (0.14 seconds) at 8:46:02 PM
610606 bytes written to static/bundle.js (0.08 seconds) at 8:50:13 PM
610597 bytes written to static/bundle.js (0.08 seconds) at 8:58:16 PM
610597 bytes written to static/bundle.js (0.19 seconds) at 9:10:45 PM

usage

Use watchify with all the same options as browserify except that -o (or --outfile) is mandatory. Additionally, there are also:

Standard Options:

  --outfile=FILE, -o FILE

    This option is required. Write the browserify bundle to this file. If
    the file contains the operators `|` or `>`, it will be treated as a
    shell command, and the output will be piped to it.

  --verbose, -v                     [default: false]

    Show when a file was written and how long the bundling took (in
    seconds).

  --version

    Show the watchify and browserify versions with their module paths.
Advanced Options:

  --delay                           [default: 100]

    Amount of time in milliseconds to wait before emitting an "update"
    event after a change.

  --ignore-watch=GLOB, --iw GLOB    [default: false]

    Ignore monitoring files for changes that match the pattern. Omitting
    the pattern will default to "**/node_modules/**".

  --poll=INTERVAL                   [default: false]

    Use polling to monitor for changes. Omitting the interval will default
    to 100ms. This option is useful if you're watching an NFS volume.

methods

var watchify = require('watchify');

watchify(b, opts)

watchify is a browserify plugin, so it can be applied like any other plugin. However, when creating the browserify instance b, you MUST set the cache and packageCache properties:

var b = browserify({ cache: {}, packageCache: {} });
b.plugin(watchify);
var b = browserify({
  cache: {},
  packageCache: {},
  plugin: [watchify]
});

By default, watchify doesn't display any output, see events for more info.

b continues to behave like a browserify instance except that it caches file contents and emits an 'update' event when a file changes. You should call b.bundle() after the 'update' event fires to generate a new bundle. Calling b.bundle() extra times past the first time will be much faster due to caching.

Important: Watchify will not emit 'update' events until you've called b.bundle() once and completely drained the stream it returns.

var fs = require('fs');
var browserify = require('browserify');
var watchify = require('watchify');

var b = browserify({
  entries: ['path/to/entry.js'],
  cache: {},
  packageCache: {},
  plugin: [watchify]
});

b.on('update', bundle);
bundle();

function bundle() {
  b.bundle()
    .on('error', console.error)
    .pipe(fs.createWriteStream('output.js'))
  ;
}

options

You can to pass an additional options object as a second parameter of watchify. Its properties are:

opts.delay is the amount of time in milliseconds to wait before emitting an "update" event after a change. Defaults to 100.

opts.ignoreWatch ignores monitoring files for changes. If set to true, then **/node_modules/** will be ignored. For other possible values see Chokidar's documentation on "ignored".

opts.poll enables polling to monitor for changes. If set to true, then a polling interval of 100ms is used. If set to a number, then that amount of milliseconds will be the polling interval. For more info see Chokidar's documentation on "usePolling" and "interval". This option is useful if you're watching an NFS volume.

var b = browserify({ cache: {}, packageCache: {} });
// watchify defaults:
b.plugin(watchify, {
  delay: 100,
  ignoreWatch: ['**/node_modules/**'],
  poll: false
});

b.close()

Close all the open watch handles.

events

b.on('update', function (ids) {})

When the bundle changes, emit the array of bundle ids that changed.

b.on('bytes', function (bytes) {})

When a bundle is generated, this event fires with the number of bytes.

b.on('time', function (time) {})

When a bundle is generated, this event fires with the time it took to create the bundle in milliseconds.

b.on('log', function (msg) {})

This event fires after a bundle was created with messages of the form:

X bytes written (Y seconds)

with the number of bytes in the bundle X and the time in seconds Y.

working with browserify transforms

If your custom transform for browserify adds new files to the bundle in a non-standard way without requiring. You can inform Watchify about these files by emiting a 'file' event.

module.exports = function(file) {
  return through(
    function(buf, enc, next) {
      /*
        manipulating file content
      */
      
      this.emit("file", absolutePathToFileThatHasToBeWatched);
      
      next();
    }
  );
};

install

With npm do:

$ npm install -g watchify

to get the watchify command and:

$ npm install watchify

to get just the library.

troubleshooting

rebuilds on OS X never trigger

It may be related to a bug in fsevents (see #250 and stackoverflow). Try the --poll flag and/or renaming the project's directory - that might help.

watchify swallows errors

To ensure errors are reported you have to add a event listener to your bundle stream. For more information see (browserify/browserify#1487 (comment) and stackoverflow)

Example:

var b = browserify();
b.bundle()
  .on('error', console.error)
   ...
;

see also

  • budo – a simple development server built on watchify
  • errorify – a plugin to add error handling to watchify development
  • watchify-request – wraps a watchify instance to avoid stale bundles in HTTP requests
  • watchify-middleware – similar to watchify-request, but includes some higher-level features

license

MIT