我们的应用程序在浏览器中使用mongoose(v4.6.5)(http://mongoosejs.com/docs/browser.html),但我最近切换到使用webpack(v2.1.0-beta.27)和webpack-dev-server(用于开发: 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;

我猜测浏览器中的mongoose不想从二进制文件中读取这个检查点。问题是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;

然后我使用env BUILD_ENV=browser webpack-dev-server
运行我的webpack构建,但它不起作用,我猜测因为webpack实际上并没有执行你的代码而是静态分析它。
我在mongoose上也看到了这个公关,但它似乎没有解决我的问题:https://github.com/Automattic/mongoose/pull/4512/files
。
我的问题是如何在浏览器中使用mongoose(使用webpack)而不从二进制文件中读取?