我们的应用在浏览器(http://mongoosejs.com/docs/browser.html)中使用猫鼬(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)而不从二进制文件中读取它?