私たちのアプリは、ブラウザー ( http://mongoosejs.com/docs/browser.html ) で mongoose (v4.6.5) を使用していますが、最近、webpack (v2.1.0-beta.27) と webpack-dev- の使用に切り替えました。サーバー (開発用: v(2.1.0-beta.11) でビルドを実行すると、mongoose の解析に問題が発生します。
試行すると、次のエラーが発生します。
WARNING in ./~/mongoose/lib/drivers/index.js
8:11 Critical dependency: the request of a dependency is an expression
window
私はそのファイルに行き、未定義の場合にバイナリファイルをインポートしようとすることを見ました:
/*!
* ignore
*/
var driver;
if (typeof window === 'undefined') {
driver = require(global.MONGOOSE_DRIVER_PATH || './node-mongodb-native');
} else {
driver = require('./browser');
}
/*!
* ignore
*/
module.exports = driver;
ブラウザのマングースは、このチェックのポイントであるバイナリ ファイルから読み取りたくないのではないかと推測しています。問題は、window
webpack によってコンパイルされているため、コンパイルの時点では存在しないため、このバイナリ ファイルを静的に分析しようとすることです。
これを mongoose ファイルに追加して、webpack が mongoose のサーバー側の依存関係グラフを下に進めないようにしました。
/*!
* ignore
*/
var driver;
if (typeof window === 'undefined' && process.env.BUILD_ENV !== 'browser') {
driver = require(global.MONGOOSE_DRIVER_PATH || './node-mongodb-native');
} else {
driver = require('./browser');
}
/*!
* ignore
*/
module.exports = driver;
次に、webpack ビルドをenv BUILD_ENV=browser webpack-dev-server
実行しますが、動作しません。webpack は実際にコードを実行するのではなく、静的に分析するためだと思います。
私はマングースでもこのPRを見ましたが、私の問題を解決していないようです: https://github.com/Automattic/mongoose/pull/4512/files
.
私の質問は、バイナリファイルから読み取らずにブラウザで(webpackを使用して)mongooseを使用するにはどうすればよいですか?