require
モジュールは実行時ではなくコンパイル時にバンドルされるため、条件付きで browserifyを使用できないことはわかっています。条件付きでモジュールを削除するのはどうですか?
画像ギャラリーを作成できるアプリがあるとします。ギャラリーは編集することもできます (画像の並べ替えなど)。しかし、ギャラリーのレンダリングと編集は結合されており、完全に分離することはできません。しかし、ギャラリーを展開するために編集機能は必要なく、どのモジュールが使用されているかはわかっています。2 つの異なるバンドルを作成したいと考えています。1 つは編集機能を備え、もう 1 つはほとんどの編集コードを削除して編集機能を備えていません。私がしたことはenvify
、uglify のデッド コードの削除を使用して、自分のコードを小さなバンドルから除外することです。
前 (thing.js)
//...some code that only the editor needs...
module.exports = thing;
後 (thing.js)
if(process.env.INCLUDE_EDITOR === 'yes') {
//...some code that only the editor needs...
module.exports = thing;
}
これはうまく機能し、エディター バンドルはすでに小さくなっています。そして、他のバンドルがその機能を使用することは決してないことを知っているので、thing
何もエクスポートせず、空のモジュールを使用しても問題ありません。
ここで問題です。thing.js
たとえば、モジュールが必要な場合は、デッド コードの削除後に誰も使用していなくてもpica
バンドルされます。
前 (thing.js)
var pica = require('pica');
//...some code that uses pica...
module.exports = thing;
後 (thing.js)
if(process.env.INCLUDE_EDITOR === 'yes') {
var pica = require('pica');
//...some code that uses pica...
module.exports = thing;
}
要約すると、私のバンドルにはpica
ライブラリが含まれるようになりましたが、誰もそれを必要としません。それを必要とするコードはデッド コードでしたが、uglify は完全に削除できることを明らかに理解できませんpica
。