3

我们的应用在浏览器(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)而不从二进制文件中读取它?

4

0 回答 0