将 MaterializeCSS 与 Webpack 结合使用 - 无法解析模块 'hammerjs'

Using MaterializeCSS with Webpack - Cannot resolve module 'hammerjs'

我正在使用 webpack 构建一个项目。该项目使用 materializecss。当我将 materialize.js 添加到条目文件时,它会抱怨以下错误 Cannot resolve module 'hammerjs'

当我打开文件时,我可以看到那里的定义,但 webpack 似乎无法识别它。与 knockout-es6 中的 weakmap 相同。我的解决方案是在 resolve.alias 中添加对 hammer.min.js 的引用,但不确定这样做是否正确。

如何让 webpack 识别这些依赖项与相关库捆绑在一起时 - 在本例中为 materialize.js

只要您的项目中安装了 hammerjs(即 npm i hammerjs --save),它就应该可以找到它。正如@egunays 所指出的,您还应该 import 'expose?Hammer!hammerjs/hammer 才能访问 Hammer 对象。

如果您担心可能出现重复(您可以通过检查生成的包来验证这一点),您可以使用 webpack.optimize.DedupePluginwebpack.optimize.CommonsChunkPlugin 也可以派上用场。这将允许您将您的应用程序代码与供应商捆绑包分开。

有关详细信息,请参阅 official optimization docs

为此最好使用 ProvidePlugin。

new webpack.ProvidePlugin({
    $: "jquery",
    jQuery: "jquery",
    "Hammer": "hammerjs/hammer"
}),

这不需要额外的加载程序,实际上在文档中推荐:

There are cases where you want a module to export itself to the global context. Don't do this unless you really need this. (Better use the ProvidePlugin) 1