• Stars
    star
    1,788
  • Rank 26,002 (Top 0.6 %)
  • Language
    JavaScript
  • License
    Other
  • Created over 11 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

watch mode for browserify builds

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

More Repositories

1

browserify

browser-side require() the node.js way
JavaScript
14,579
star
2

browserify-handbook

how to build modular applications with browserify
JavaScript
4,584
star
3

events

Node's event emitter for all engines.
JavaScript
1,370
star
4

resolve

Implements the node.js require.resolve() algorithm
JavaScript
774
star
5

crypto-browserify

partial implementation of node's `crypto` for the browser
JavaScript
652
star
6

wzrd.in

browserify as a service.
JavaScript
636
star
7

browserify-website

the code that runs http://browserify.org
HTML
588
star
8

brfs

browserify fs.readFileSync() static asset inliner
JavaScript
563
star
9

rustify

Rust WebAssembly transform for Browserify
JavaScript
494
star
10

webworkify

launch a web worker that can require() in the browser with browserify
JavaScript
416
star
11

detective

Find all calls to require() no matter how deeply nested using a proper walk of the AST
JavaScript
414
star
12

tinyify

a browserify plugin that runs various optimizations, so you don't have to install them all manually. makes your bundles tiny!
JavaScript
411
star
13

factor-bundle

factor browser-pack bundles into common shared bundles
JavaScript
402
star
14

commonjs-assert

Node.js's require('assert') for all engines
JavaScript
293
star
15

sha.js

Streamable SHA hashes in pure javascript
JavaScript
287
star
16

http-browserify

node's http module, but for the browser
JavaScript
244
star
17

node-util

node.js util module as a module
JavaScript
244
star
18

module-deps

walk the dependency graph to generate a stream of json output
JavaScript
209
star
19

vm-browserify

require('vm') like in node but for the browser
JavaScript
200
star
20

bundle-collapser

convert bundle paths to IDs to save bytes in browserify bundles
JavaScript
195
star
21

pbkdf2

PBKDF2 with any supported hashing algorithm in Node
JavaScript
189
star
22

browser-pack

pack node-style source files from a json stream into a browser bundle
JavaScript
174
star
23

static-eval

evaluate statically-analyzable expressions
JavaScript
171
star
24

path-browserify

The path module from Node.js for browsers
JavaScript
168
star
25

common-shakeify

browserify tree shaking plugin using `common-shake`
JavaScript
105
star
26

stream-browserify

the stream module from node core for browsers
JavaScript
101
star
27

browser-resolve

resolve function which support the browser field in package.json
JavaScript
101
star
28

randombytes

random bytes from browserify stand alone
JavaScript
99
star
29

diffie-hellman

pure js diffie-hellman
JavaScript
94
star
30

awesome-browserify

🔮 A curated list of awesome Browserify resources, libraries, and tools.
88
star
31

syntax-error

detect and report syntax errors in source code strings
JavaScript
79
star
32

static-module

convert module usage to inline expressions
JavaScript
74
star
33

ify-loader

Webpack loader to handle browserify transforms as intended.
JavaScript
68
star
34

browserify-aes

aes, for browserify
JavaScript
62
star
35

createHmac

Node style HMAC for use in the browser, with native implementation in node
JavaScript
62
star
36

browserify-zlib

Full zlib module for browserify
JavaScript
57
star
37

browser-unpack

parse a bundle generated by browser-pack
JavaScript
55
star
38

stream-splicer

streaming pipeline with a mutable configuration
JavaScript
55
star
39

createHash

Node style hashes for use in the browser, with native hash functions in node
JavaScript
52
star
40

md5.js

node style md5 on pure JavaScript
JavaScript
44
star
41

browserify-sign

createSign and createVerify in your browser
JavaScript
43
star
42

labeled-stream-splicer

stream splicer with labels
JavaScript
42
star
43

console-browserify

Emulate console for all the browsers
JavaScript
33
star
44

ripemd160

JavaScript component to compute the RIPEMD160 hash of strings or bytes.
JavaScript
32
star
45

buffer-xor

A simple module for bitwise-xor on buffers
JavaScript
30
star
46

publicEncrypt

publicEncrypt/privateDecrypt for browserify
JavaScript
29
star
47

insert-module-globals

insert implicit module globals into a module-deps stream
JavaScript
26
star
48

createECDH

browserify version of crypto.createECDH
JavaScript
24
star
49

timers-browserify

timers module for browserify
JavaScript
24
star
50

parse-asn1

JavaScript
21
star
51

EVP_BytesToKey

JavaScript
20
star
52

browserify-rsa

JavaScript
19
star
53

cipher-base

abstract base class for crypto-streams
JavaScript
18
star
54

browserify-cipher

JavaScript
18
star
55

tty-browserify

the tty module from node core for browsers
JavaScript
17
star
56

deps-sort

sort module-deps output for deterministic browserify bundles
JavaScript
16
star
57

acorn-node

the acorn javascript parser, preloaded with plugins for syntax parity with recent node versions
JavaScript
13
star
58

admin

administrative procedures for the browserify org
12
star
59

hash-base

abstract base class for hash-streams
JavaScript
11
star
60

discuss

discuss project organization, initiatives, and whatever!
11
star
61

browserify-des

DES for browserify
JavaScript
10
star
62

randomfill

JavaScript
9
star
63

buffer-reverse

A lite module for byte reversal on buffers.
JavaScript
6
star
64

detective-esm

find es module dependencies [experimental]
JavaScript
3
star
65

hash-test-vectors

JavaScript
3
star
66

pseudorandombytes

pseudorandombytes for the browser
JavaScript
3
star
67

perf-hooks-browserify

[WIP] The perf_hooks node module API for browserify
JavaScript
3
star
68

.github

Housing of Browserify's GitHub configuration and base files
2
star
69

timing-safe-equal

JavaScript
1
star
70

scrypt

JavaScript
1
star