首页 > 解决方案 > 当在文件名中包含块哈希时,webpack 在 publicPath 中设置哈希会导致错误?

问题描述

webpack打包项目时,需要将dist文件上传到cdn,然后提高访问速度。

我需要将之前的捆绑包保留在 CDN 中,因此我使用构建哈希来唯一化捆绑包。

但是我发现[hash]在?publicPathchunkhashfilename

我知道删除chunkhashinfilename可以解决问题,但我仍然想知道为什么?

这是我的小型 webpack 配置:

const path = require("path");

module.exports = {
  entry: "./src/index.js",
  output: {
    path: path.resolve(__dirname, "./dist"),
    filename: "[chunkhash].js",
    publicPath: "https://my.cdn/[hash]/"
  }
};

错误信息:

块主 [entry] [chunkhash].js 中的错误不能将 [chunkhash] 或 [contenthash] 用于“[chunkhash].js”中的块(改用 [hash])

标签: javascriptnode.jswebpack

解决方案


你误解了这个publicPath概念。公共路径是从文件所在的本地域的根目录开始,webpack 必须请求获取必要的其他块的位置。例如,如果是/,webpack 将请求${CURRENT_DOMAIN}/dj834j9384j123.js. 所以 publicPath 必须是一种路径。

而且,如果你使用 webpack-dev-server 或类似的,不应该使用 chunkhash,只能使用 hash。


推荐阅读