Browserifyでbundleするとき、require
したNodeコアモジュールも結合される。ほとんどのコードはブラウザ上でも動くが、IOの発生するモジュールのみ同じインターフェースを持つブラウザ向けモジュールに置換される。
Browserifyのrequire
したモジュールを結合する仕組みは、コアモジュールでも同じなので、-r
オプションで置き換えの対象とすることができる。例えばrequire('http')
するとhttp-browserifyに置換されるが、これをforkしたモジュールを使ってbundleすることもできる。
$ npm install MisumiRize/http-browserify
http-browserify@1.7.0 node_modules/http-browserify
├── inherits@2.0.1
└── Base64@0.2.1
$ browserify app.js -r http-browserify:http > bundle.js
単純に考えればrequire
の仕組みはコアモジュールとそれ以外とで同じなので、-r
で何も問題なかった。JavaScriptからだとこう書く。
browserify(['./app.js'])
.require('http-browserify', {expose: 'http'})
.bundle(function(err, src) {
console.log(src);
});