{"id":15512656,"url":"https://github.com/browserify-rails/browserify-rails","last_synced_at":"2025-10-12T09:31:36.445Z","repository":{"id":16816228,"uuid":"19575332","full_name":"browserify-rails/browserify-rails","owner":"browserify-rails","description":"Browserify + Rails = a great way to modularize your legacy JavaScript","archived":false,"fork":false,"pushed_at":"2023-01-06T04:02:46.000Z","size":461,"stargazers_count":702,"open_issues_count":31,"forks_count":88,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-10-07T13:20:01.329Z","etag":null,"topics":["browserify","commonjs","rails","rails-browserify","ruby"],"latest_commit_sha":null,"homepage":"","language":"Ruby","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/browserify-rails.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-05-08T13:56:59.000Z","updated_at":"2025-06-19T11:51:23.000Z","dependencies_parsed_at":"2023-01-13T19:02:16.766Z","dependency_job_id":null,"html_url":"https://github.com/browserify-rails/browserify-rails","commit_stats":null,"previous_names":[],"tags_count":49,"template":false,"template_full_name":null,"purl":"pkg:github/browserify-rails/browserify-rails","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/browserify-rails%2Fbrowserify-rails","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/browserify-rails%2Fbrowserify-rails/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/browserify-rails%2Fbrowserify-rails/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/browserify-rails%2Fbrowserify-rails/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/browserify-rails","download_url":"https://codeload.github.com/browserify-rails/browserify-rails/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/browserify-rails%2Fbrowserify-rails/sbom","scorecard":{"id":254764,"data":{"date":"2025-08-11","repo":{"name":"github.com/browserify-rails/browserify-rails","commit":"b77b1f697831b1ca998046c17b00851c2c41493d"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2,"checks":[{"name":"Code-Review","score":2,"reason":"Found 5/17 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 19 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"21 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-x9w5-v3q2-3rhw","Warn: Project is vulnerable to: GHSA-wg6g-ppvx-927h","Warn: Project is vulnerable to: GHSA-r9p9-mrjm-926w","Warn: Project is vulnerable to: GHSA-434g-2637-qmqr","Warn: Project is vulnerable to: GHSA-49q7-c7j4-3p7m","Warn: Project is vulnerable to: GHSA-977x-g7h5-7qgw","Warn: Project is vulnerable to: GHSA-f7q4-pwc6-w24p","Warn: Project is vulnerable to: GHSA-fc9h-whq2-v747","Warn: Project is vulnerable to: GHSA-vjh7-7g9h-fjfh","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-vh95-rmgr-6w4m","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-h7cp-r72f-jxh6","Warn: Project is vulnerable to: GHSA-v62p-rq8g-8h59","Warn: Project is vulnerable to: GHSA-g4rg-993r-mgx7"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-17T09:22:37.533Z","repository_id":16816228,"created_at":"2025-08-17T09:22:37.533Z","updated_at":"2025-08-17T09:22:37.533Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279010651,"owners_count":26084784,"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-10-12T02:00:06.719Z","response_time":53,"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","commonjs","rails","rails-browserify","ruby"],"created_at":"2024-10-02T09:53:46.334Z","updated_at":"2025-10-12T09:31:35.880Z","avatar_url":"https://github.com/browserify-rails.png","language":"Ruby","funding_links":[],"categories":["Ruby"],"sub_categories":[],"readme":"# browserify-rails\n\nThis project is currently in maintenance mode. New contributors are more than welcome!\n\n[![Gem Version](https://badge.fury.io/rb/browserify-rails.svg)](http://badge.fury.io/rb/browserify-rails) [![](https://img.shields.io/gem/dt/browserify-rails.svg)](https://rubygems.org/gems/browserify-rails)\n\nThis library adds CommonJS module support to Sprockets (via Browserify).\n\nIt lets you mix and match  `//= require` directives and `require()` calls for including plain javascript files as well as modules. However, it is important to remember that once you are into code that is being browserified you can no longer use sprockets-style require (so no `//= require`). In many cases, it makes sense to put all your sprockets-required code in a separate file or at the very least at the top of your main JavaScript file. Then use `require()` to pull in the CommonJS code.\n\n1. Manage JS modules with `npm`\n2. Serve assets with Sprockets\n3. Require modules with `require()` (without separate `//= require` directives)\n4. Only build required modules\n5. Require *npm modules* in your Rails assets\n6. Require modules relative to asset paths (ie app/assets/javascript) with non-relative syntax (see below before using)\n7. Configure browserify options for each JavaScript file so you can mark modules with `--require`, `--external`, etc\n\n## Should you use this gem?\n\nAs the primary developer, I'm going to offer some opiniated advice. The sweet spot for this\ngem is for Rails projects with legacy JavaScript (not using CommonJS/modules). This gem is\na great way to make it possible to rewrite that legacy JavaScript to CommonJS on a timeline\nthat you dictate. Then consider stepping off the Rails asset pipeline or using another gem.\n\nIf you're starting a new Rails project today, I highly recommend looking at alternatives to\nthis gem. The primary reason is that this gem, while it works well, is not as efficient as\nmost would like for local development. Also a lot has changed over the last couple of years.\n\nAn example of that change is this project from Rails:\n\n[rails/webpacker](https://github.com/rails/webpacker)\n\nThis is a huge step in the right direction for the Rails community. In the past, it has been\nextremely frustrating working with JavaScript on the asset pipeline. The good news is you have a lot\nof great choices. If I were starting a new Rails project today, I think the safest choice is\none in which you have a [Procfile](https://mattstauffer.co/blog/using-a-procfile-to-streamline-your-local-development) that kicks off a separate Webpack build and you use zero\nRails magic. A slightly less safe but maybe more convenient choice would be trying rails/webpacker\nor another gem. The choice is yours.\n\n\nFor more discussion on this topic, see issues\n[203](https://github.com/browserify-rails/browserify-rails/issues/203),\n[161](https://github.com/browserify-rails/browserify-rails/issues/161),\n[43](https://github.com/browserify-rails/browserify-rails/issues/43), etc.\n\n## Getting Started\n\nAdd this line to your application's Gemfile:\n\n    gem \"browserify-rails\"\n\nCreate `package.json` in your Rails root:\n\n```js\n{\n  \"name\": \"something\",\n  \"dependencies\" : {\n    \"browserify\": \"^14.0.0\",\n    \"browserify-incremental\": \"^3.1.0\"\n  },\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \"\u003e= 0.10\"\n  }\n}\n```\n\nThen run:\n\n    npm install\n\nThen start writing CommonJS, and everything will magically work!:\n\n```js\n// foo.js\nmodule.exports = function (n) { return n * 11 }\n\n// application.js\nvar foo = require('./foo');\nconsole.log(foo(12));\n```\n\n#### Gotchas with `require` and `module.exports`\n\nDo not put `module.exports` or `require()` in JavaScript comments or strings.\nDoing so will certainly cause issues with compilation that are difficult to\ntrack down.\n\nThis happens because browserify-rails works by parsing your JavaScript files for\nthese keywords that indicate whether it is a module, or is requiring a module.\nIf a file meets one of these criteria, browserify will compile the modules as\nexpected.\n\nBecause browserify-rails is working within the restraints of Ruby/Sprockets, the\nparsing is done by Ruby and therefore does not know whether it is a JavaScript\nstring, comment, or function.\n\n## CoffeeScript\n\nFor CoffeeScript support, make sure to follow the standard rails\n`.js.coffee` naming convention.  You'll also need to add the npm\npackage `coffeeify` as a dependency:\n\n```js\n{\n  // ...\n  \"dependencies\" : {\n    // ...\n    \"coffeeify\": \"~0.6\"\n  }\n}\n```\n\nand configure `browserify_rails` accordingly:\n\n```rb\nconfig.browserify_rails.commandline_options = \"-t coffeeify --extension=\\\".js.coffee\\\"\"\n```\n\n## Requirements\n\n* node-browserify 4.x\n* browserify-incremental\n\n## Configuration\n\n### Global configuration\n\nYou can configure different options of browserify-rails by adding one of the lines\nmentioned below into your `config/application.rb` or your environment file\n(`config/environments/*.rb`):\n\n```ruby\nclass My::Application \u003c Rails::Application\n  # Specify the file paths that should be browserified. We browserify everything that\n  # matches (===) one of the paths. So you will most likely put lambdas\n  # regexes in here.\n  #\n  # By default only files in /app and /node_modules are browserified,\n  # vendor stuff is normally not made for browserification and may stop\n  # working.\n  config.browserify_rails.paths \u003c\u003c /vendor\\/assets\\/javascripts\\/module\\.js/\n\n  # Environments in which to generate source maps\n  #\n  # The default is none\n  config.browserify_rails.source_map_environments \u003c\u003c \"development\"\n\n  # Should the node_modules directory be evaluated for changes on page load\n  #\n  # The default is `false`\n  config.browserify_rails.evaluate_node_modules = true\n\n  # Force browserify on every found JavaScript asset if true.\n  # Can be a proc.\n  #\n  # The default is `false`\n  config.browserify_rails.force = -\u003e(file) { File.extname(file) == \".ts\" }\n\n  # Command line options used when running browserify\n  #\n  # can be provided as an array:\n  config.browserify_rails.commandline_options = [\"-t browserify-shim\", \"--fast\"]\n\n  # or as a string:\n  config.browserify_rails.commandline_options = \"-t browserify-shim --fast\"\n\n  # Define NODE_ENV to be used with envify\n  #\n  # defaults to Rails.env\n  config.browserify_rails.node_env = \"production\"\n```\n\n### browserify-incremental\n\n[browserify-incremental](https://github.com/jsdf/browserify-incremental) is used to cache browserification of CommonJS modules. One of the side effects is that the absolute module path is included in the emitted JavaScript. Most people do not want this for production code so browerify-incremental is current disabled for the `production` and `staging` environments. Note that counter-intuitively, browserify-incremental helps even with a single build pass of your code because typically the same modules are used multiple times. So it helps even for say asset compilation on a push to Heroku.\n\n#### Enabling browserify-incremental in production\n\nTo enable browserify-incremental in production, add the following line to `config/environments/production.rb`:\n\n```ruby\nconfig.browserify_rails.use_browserifyinc = true\n```\n\n### Multiple bundles\n\nnode-browserify supports [multiple bundles](https://github.com/substack/node-browserify#multiple-bundles)\nand so do does rails-browserify. It does this using `config/browserify.yml`.\nBelow is an example.\n\nSay you have three JavaScript files and one is a huge library you would like to\nuse in both. Browserify lets you mark that huge library with --require in one\nfile (to both bundle it and mark it with a special internal ID) and then\nrequire it in the other file and mark it with --external (so it is not bundled\ninto the file but instead accessed via browserify internals using that special\nID). Note that this only works when the file that has the library bundled is\nloaded before the file that uses the library with --external.\n\n```yaml\njavascript:\n  main:\n    require:\n      - a_huge_library\n  secondary:\n    external:\n      - a_huge_library\n```\n\nNote that any valid browserify option is allowed in the YAML file but not all\nuse cases have been considered. If your use case does not work, please open\nan issue with a runnable example of the problem including your browserify.yml file.\n\n### Inside Isolated Engines\n\nTo make browserify-rails work inside an isolated engine, add the engine app directory to the browserify-rails paths (inside engine.rb):\n\n```ruby\nconfig.browserify_rails.paths \u003c\u003c -\u003e (p) { p.start_with?(Engine.root.join(\"app\").to_s) }\n```\n\nIf you wish to put the node_modules directory within the engine, you have some control over it with:\n\n```ruby\nconfig.browserify_rails.node_bin = \"some/directory\"\n```\n\n### Example setup\n\nRefer to this repo for setting up this gem with ES6 and all front-end goodies like react and all - [github.com/gauravtiwari/browserify-rails](https://github.com/gauravtiwari/browserify-rails)\n\n## Support for rails asset directories as non-relative module sources\n\nIn the Rails asset pipeline, it is common to have files in\n`app/assets/javascripts` and being able to do `//= require some_file` which\nexists in one of the asset/javascript directories. In some cases, it is\nuseful to have similar functionality with browserify. This has been added\nby putting the Rails asset paths into NODE_PATH environment variable when\nrunning browserify.\n\nBut this comes at a large cost: right now, it appears to break source maps.\nThis might be a bug or a fixable breakage but it hasn't been solved yet. The\nuse of NODE_PATH is also contentious in the NodeJS community.\n\nWhy leave it in? Because some typical Rails components break without it.\nFor example, jasmine-rails expects to be able to move JavaScript to\ndifferent depths. So if you do a relative require from spec/javascript to\napp/assets/javascripts, your tests will fail to run when RAILS_ENV=test.\n\nSo if you really need this, use it. But if you really need it for files that\nare not tests, you should definitely figure out an alternative. Support\nfor this may go away if we cannot fix the issue(s) with source maps being\ninvalid.\n\n## Deploying to Heroku\n\nHeroku is a very common target for deploying. You'll have to add custom\nbuildpacks that run `bundle` and `npm install` on the target machine.\n\n    $ heroku buildpacks:add https://github.com/heroku/heroku-buildpack-nodejs.git\n    $ heroku buildpacks:add https://github.com/heroku/heroku-buildpack-ruby.git\n\n## Using Browserify Transforms\n\nYou can easily use a browserify transform by making some additions to your `package.json` and creating a .babelrc. For example, here is how you can add ES6 support in your app:\n\n1. Add `babelify` and `babel-preset-es2015` to your `package.json` in your app's root directory either by editing the file directly and running `npm install` or using `npm install babelify --save` and `npm install babel-preset-es2015 --save`\n2. Update your `package.json` to contain the babelify transform by adding the following lines\n```\n   \"browserify\": {\n    \"transform\": [\n      [\n        \"babelify\"\n      ]\n    ]\n  }\n```\n3. Create a `.babelrc` file in the project root with the following contents\n```\n{\n  \"plugins\": [],\n  \"presets\": [\"es2015\"]\n}\n```\n   \n4. Create some `.es6` files and require them with `var m = require('./m.es6')` or `import m from './m.es6'`\n5. Restart your server, and you now have ES6 support!\n\n\n## Troubleshooting\n\n### Clear the asset pipeline cache\n\nThe Rails asset pipeline caches some files in the `tmp` directory inside\nRails root. It can happen that sometimes the cache does not get invalidated\ncorrectly. You can manually clear the cache in at least two ways:\n\n1. `rake tmp:cache:clear`\n2. `rm -rf ./tmp` (when in the root directory of the Rails project)\n\nThe second method is definitely brute force but if you experience issues,\nit is definitely worth trying before spending too much time debugging\nwhy something that is browserified appears to not match the sources files.\n\n### Javascript Tests\n\nIf you want to use `browserify` to process test files as well, you will\nneed to configure `browserify-rails` to process files in your `spec` or `test`\ndirectories.\n\n```ruby\nconfig.browserify_rails.paths \u003c\u003c -\u003e (p) { p.start_with?(Rails.root.join(\"spec/javascripts\").to_s) }\n```\n\n## Acceptance Test Failures\n\nIf you have Sprockets precompile multiple JS files, each of which include\ncertain browserified files, your acceptance tests may timeout before some\nof the assets have finished compiling.\n\nTo avoid this problem, run `rake assets:precompile` before running your\nacceptance tests.\n\n## Contributing\n\nPull requests appreciated. Pull requests will not be rejected based on\nideological neurosis of either the NodeJS or the Ruby on Rails communities.\nIn other words, technical needs are respected.\n\n## Running the dummy Rails app\n\nThere is a dummy rails app in `test/dummy`. You can change to that directory\nand run `bundle install` and then `bundle exec rails server`. You can see\nthe test JavaScript files in `app/assets/javascripts` so try loading one --\nfor example `http://localhost:3000/assets/application.js`.\n\nYou can use this dummy app to try out your coding/refactoring/hacking ideas\nand also see how the tests are written. To run the tests, run `bundle exec rake test`\nin the root directory of the browserify-rails code (not in the dummy app).\n\n## Potential areas of change (contributions welcome)\n\n### Multiple modules\n\nOften one has one main module (say a library module) and other modules that\nconsume the main module. It would be nice to be able to establish this\nrelationship in the YAML file to avoid having to manually manage the require\nand external entries for the involved modules.\n\n## Alternatives\n\n### Use webpack or browserify directly instead of the asset pipeline\n\nUse a tool like ProcMan to kick off a webpack or browserify process to rebuild your JavaScript on change. Reference the bundle in your Rails template and away you go. With webpack, you can even use the dev server and point to the dev server port in your Rails template to load JavaScript directly from webpack (it'll block on build so you'll always get your latest code). This does require configuring webpack hot middleware to have a port (see [__webpack_hmr goes to the wrong port and fails](http://stackoverflow.com/questions/35446109/webpack-hmr-goes-to-the-wrong-port-and-fails/35446292#35446292)).\n\n\n## Contributors\n\n* [Henry Hsu](https://github.com/hsume2)\n* [Cássio Souza](https://github.com/cassiozen)\n* [Marten Lienen](https://github.com/CQQL)\n* [Lukasz Sagol](https://github.com/zgryw)\n* [Cymen Vig](https://github.com/cymen)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrowserify-rails%2Fbrowserify-rails","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrowserify-rails%2Fbrowserify-rails","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrowserify-rails%2Fbrowserify-rails/lists"}