webpack报错:contentBase属性不存在,牛批~,顺便记忆下contentBase和publicPath

833 阅读2分钟

话不多说先,直接上报错的图,泥马这图我倒是看清了

webpack-dev-server的版本 version >= 4.0.0 配置的选项中取消了 contentBase 配置,取而代之的是 static下的directory属性。

we1.jpg

  • unknown property 'contentBase'说明这个版本的webpack并不能识别contentBase这个属性
  • 新版本的webpack配置文件webpack.config.json格式调整了,不支持contentBase,要用static这个属性代替
  • 我用的"webpack": "^5.70.0"

we2.jpg

  • 我本想引用本地的静态.json文件,该文件夹与webpack.config.js平级
  • contentBase是用来指定被访问html页面所在目录的 , 只有在你想要提供静态文件时才需要
export const getMainData = () => {
    return (dispatch) => {
        fetch("/public/teslaData.json")
    }
}
// dev-server 4.0 以前的写法
devServer: { 
    contentBase: path.join(__dirname, "./dist") 
} 
// dev-server 4.0 以后的写法 
devServer: {     
    static: {       
        directory: path.join(__dirname, './dist')     
    }   
}

大佬我本想获取本地的json数据,但是踏酿的报错,I just like

we3.jpg

  • 按照路径来说,看起来是没错的,但是运行起来之后就一直报错,404
  • 后来百度之后一些论坛和博客上说,路径应该是以index.html文件所在的相对路径,这里的index应该是虚拟的index文件
  • 使用了html-webpack-plugin,当不指定contentBase的话dev-server的默认根目录是在webpack.config同一级的目录下,也就是说:这里生成的虚拟index.html是在根目录里面的,也就是和webpack.config.js这些配置文件是平级

output中的publicPath

加载外部资源(external resources)(如图片、文件等)来说,output.publicPath 是很重要的选项。 如果指定了一个错误的值,则在加载这些资源时会收到 404 错误。通俗的说也就是影响资源生文件的引入路径

webpack-dev-server 中配置的 publicPath

webpack-dev-serve会在内存中保存一份打包后的文件,publicPath映射的资源就是内存的根目录或者说是内存中的文件

webpack-dev-serve中的contentBase

告诉服务器从哪里提供内容。只有在你想要提供静态文件时才需要。通俗的讲就是,contentBase访问的不是内存中的文件,而是我们本地真实存在的 devServer.publicPath优先于devServer.contentBase

总的来说

  • output.publicPath :影响资源生成路径和文件的引入路径
  • devServer.publicPath :设置内存中资源的访问地址,当我们修改本地代码时会重新编译,替换掉内存中原来的文件
  • devServer.contentBase:设置访问本地资源的目录

参考文献: blog.csdn.net/youlinhuany…

参考文献:blog.csdn.net/qq_41604498…

参考文献:blog.csdn.net/weixin_4245…

结语

前端react QQ群:788023830 ---- React/Redux - 地下老英雄

前端交流QQ群:249620372 ---- FRONT-END-JS前端

(我们的宗旨是,为了加班,为了秃顶……,仰望大佬),希望小伙伴们加群一起学习