{"id":13447285,"url":"https://github.com/ngryman/gulp-bro","last_synced_at":"2025-07-29T01:08:07.095Z","repository":{"id":4262376,"uuid":"52547786","full_name":"ngryman/gulp-bro","owner":"ngryman","description":":punch: gulp + browserify + incremental build, done right.","archived":false,"fork":false,"pushed_at":"2022-06-22T08:17:51.000Z","size":2009,"stargazers_count":122,"open_issues_count":27,"forks_count":13,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-05-20T04:04:44.934Z","etag":null,"topics":["browserify","gulp","gulp-plugin","incremental","recipe","watchify"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ngryman.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"license","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-02-25T18:35:58.000Z","updated_at":"2024-06-19T22:22:02.000Z","dependencies_parsed_at":"2022-09-15T07:20:18.240Z","dependency_job_id":null,"html_url":"https://github.com/ngryman/gulp-bro","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/ngryman/gulp-bro","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ngryman%2Fgulp-bro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ngryman%2Fgulp-bro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ngryman%2Fgulp-bro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ngryman%2Fgulp-bro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ngryman","download_url":"https://codeload.github.com/ngryman/gulp-bro/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ngryman%2Fgulp-bro/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267520351,"owners_count":24100825,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-28T02:00:09.689Z","response_time":68,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["browserify","gulp","gulp-plugin","incremental","recipe","watchify"],"created_at":"2024-07-31T05:01:12.946Z","updated_at":"2025-07-29T01:08:07.073Z","avatar_url":"https://github.com/ngryman.png","language":"JavaScript","readme":"\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Gulp Bro\" src=\"https://raw.githubusercontent.com/ngryman/artworks/master/gulp-bro/heading/gulp-bro-2x.png\" width=\"228\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  gulp + browserify + incremental build, done right.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"//travis-ci.org/ngryman/gulp-bro\"\u003e\n    \u003cimg alt=\"Build Status\" src=\"https://img.shields.io/travis/ngryman/gulp-bro.svg\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"//codecov.io/github/ngryman/gulp-bro\"\u003e\n    \u003cimg alt=\"Coverage\" src=\"https://img.shields.io/codecov/c/github/ngryman/gulp-bro.svg\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"//codecov.io/github/ngryman/gulp-bro\"\u003e\n    \u003cimg alt=\"Dependencies\" src=\"https://badges.greenkeeper.io/ngryman/gulp-bro.svg\"\u003e\n  \u003c/a\u003e\n  \u003cimg alt=\"Maintained\" src=\"https://img.shields.io/badge/maintained-no-red\"\u003e\n\u003c/p\u003e\n\n---\n\n**:wave: Hey there, this repository is not maintained anymore. I unfortunately don't have enough bandwidth to maintain it. If you are interested in becoming a contributor and help keeping the boat afloat, please let me know by opening an issue.**\n\n---\n\n\nEven through **gulp** has [recipes] to make things work, configuring **browserify** needs too much boilerplate and understanding about how things work.\n**gulp-bro** looks like any other *gulp* plugin, it does the exact same thing you can do manually, but hides the *ugly* stuff for you.\n\nIt also support [incremental build] out of the box, so you don't have to mess with *watchify* again.\n\n[recipes]: https://github.com/gulpjs/gulp/tree/master/docs/recipes\n[incremental build]: https://github.com/jsdf/browserify-incremental\n\n## Install\n\n```bash\nnpm install --save-dev gulp-bro\n```\n\n## Usage\n\n### Simple build\n\n```javascript\ngulp.task('build', () =\u003e\n  gulp.src('app.js')\n    .pipe(bro())\n    .pipe(gulp.dest('dist'))\n)\n\ngulp.watch('*.js', ['build'])\n```\n\n*Subsequent calls to `build` will be fast thanks to incremental build.*\n\n### Browserify transforms\n\n```javascript\ngulp.task('build', () =\u003e\n  gulp.src('app.js')\n    .pipe(bro({\n      transform: [\n        babelify.configure({ presets: ['es2015'] }),\n        [ 'uglifyify', { global: true } ]\n      ]\n    }))\n    .pipe(gulp.dest('dist')\n)\n```\n\n### Multiple bundles\n\n```javascript\ngulp.task('build', () =\u003e\n  gulp.src('*.js')\n    .pipe(bro())\n    .pipe(gulp.dest('dist'))\n)\n```\n\n## API\n\n`bro([options], [callback])`\n\n### `options` \u003csup\u003e\u003csub\u003e`{object}`\u003c/sub\u003e\u003c/sup\u003e\n\nExcept `error`, options are directly passed to *browserify*. So you can use *bro* as if you were using *browerify*. Here is a list of all [available options](https://github.com/substack/node-browserify#browserifyfiles--opts).\n\n#### `error` \u003csup\u003e\u003csub\u003e`{'emit'|function}`\u003c/sub\u003e\u003c/sup\u003e\n\nAnother pitfall of using *browerify* manually was that error reporting had to be done manually too or you ended up with a huge callstack and a crashed process.\nBy default, *bro* reports nicely formatted errors:\n\n![](https://raw.githubusercontent.com/ngryman/artworks/master/gulp-bro/medias/error-reporting.png)\n\nYou can customize things in 2 ways:\n\n - Set `emit` which will cause *bro* to emit the error, so you can catch it with `on('error')`.\n - Set a callback that will handle the error.\n\n## FAQ\n\n### What is incremental build?\n\nIf you use vanilla *browserify* with *gulp*, you end up with long compile times if you watch for changes. The reason is that each time a new *browserify* instance is created and has to parse and compile the whole bundle. Even if only one file has changed, the whole bundle is processed.\n\nUsually you use *watchify* to improve this, and only recompile files that have changed. The only problem with *watchify* is that it monitors file changes on its own and needs a lot of boilerplate to integrate with *gulp*, precisely because of this.\n\n*gulp* already provide a file watch mechanism that we can use out of the box. *bro* caches already compiled files and only recompile changes. So you can call repeatedly `bro` with optimal compile times.\n\n## Contributors\n\n[//]: contributor-faces\n\u003ca href=\"https://github.com/ngryman\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/892048?v=4\" title=\"ngryman\" width=\"80\" height=\"80\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/apps/greenkeeper\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/in/505?v=4\" title=\"greenkeeper[bot]\" width=\"80\" height=\"80\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/DylanPiercey\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/4985201?v=4\" title=\"DylanPiercey\" width=\"80\" height=\"80\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/shannonmoeller\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/155164?v=4\" title=\"shannonmoeller\" width=\"80\" height=\"80\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/fralonra\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/20400873?v=4\" title=\"fralonra\" width=\"80\" height=\"80\"\u003e\u003c/a\u003e\n\n[//]: contributor-faces\n\n\u003csup\u003eGenerated with [contributors-faces](https://github.com/ngryman/contributor-faces).\u003c/sup\u003e\n\n## License\n\nMIT © [Nicolas Gryman](http://ngryman.sh)\n","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fngryman%2Fgulp-bro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fngryman%2Fgulp-bro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fngryman%2Fgulp-bro/lists"}