Jsdom: “依赖请求是一个表达式”(与 Webpack 捆绑时)

创建于 2017-11-24  ·  5评论  ·  资料来源: jsdom/jsdom

基础信息:

  • Node.js 版本: 8.9.1
  • jsdom 版本: 11.4.0

将我的服务器应用程序(内部使用 JSDOM)与 web pack 捆绑在一起时,我收到以下警告:

WARNING in .../node_modules/jsdom/lib/jsdom/utils.js
    203:21-40 Critical dependency: the request of a dependency is an expression

有问题的代码是:

["canvas", "canvas-prebuilt"].some(moduleName => {
  try {
    exports.Canvas = require(moduleName);

虽然捆绑服务器代码可能不是很常见,但我发现从 266MB( src/node_modules/ )到单个 6MB JS 文件(在我的情况下)非常好。

您会考虑将上述导入重写为始终是静态的吗? 或者您是否认为这是捆绑器中的缺陷,它无法检测到实际上可以推断出可能的模块?

(如果它被改写到if用文字require参数,用户仍然可能需要添加一个例外既不canvas也不canvas-prebuilt默认可用,但至少问题会被明确处理(并且用户必须确保他们没有使用这些))。

最有用的评论

更新! :raised_hands:

修复非常简单,我从mocha-webpack问题中得到了它: https : https://github.com/zinserjan/mocha-webpack/blob/master/docs/installation/webpack-configuration.md推荐使用这个插件。

const nodeExternals = require('webpack-node-externals');

module.exports = {
  externals: [nodeExternals()],
  // etc configs here
}

所有5条评论

不,抱歉,不支持 webpack。

@domenic为什么不支持 webpack? 它是迄今为止最受欢迎的捆绑器。

因为它无法处理 jsdom 使用的代码模式。

@domenic什么样的代码模式? 现在 webpack 一直有大量的发布,并且有无数的插件。 我相信我们可以提出一些与 webpack 一起使用的好做法。 :D

我已经在 webpack 中使用了 jsdom,并且我使用的文档/dom 方法至少可以正常工作,我只是因为上面的警告才遇到这个问题。 我现在才注意到它,因为我认为mocha-webpack正在抑制警告,我在扔掉它后注意到了。 然而,可能是 mocha-webpack 没有抑制任何东西,并且正在做一些聪明的事情来处理这个问题,我们可以使用那个最佳实践。

更新! :raised_hands:

修复非常简单,我从mocha-webpack问题中得到了它: https : https://github.com/zinserjan/mocha-webpack/blob/master/docs/installation/webpack-configuration.md推荐使用这个插件。

const nodeExternals = require('webpack-node-externals');

module.exports = {
  externals: [nodeExternals()],
  // etc configs here
}
此页面是否有帮助?
0 / 5 - 0 等级