该文章是基于低版本 vue-cli2.x 建立的项目,vue-cli3.0 之后修改 webpack 配置须要在项目根目录下新建一个 vue.config.js,不过都是换汤不换药css
页面很简单,一段文字,和一张背景图片html
下面几个配置项比较重要:vue
假设咱们作以下的配置webpack
# /config/index.js assetsRoot: path.resolve(__dirname, '../dist'), assetsSubDirectory: 'static',
打包后 dist 的目录是这样的web
# dist ┌── static │ └── css │ │ └── *.css │ └── img │ │ └── *.jpg │ └── js │ │ └── *.js └── index.html
而后,双击打开 index.html,what?怎么白屏了vue-cli
F12 看一下,发现这里的资源路径是有问题的,由于 static/js/xxx 表明的是根路径下,而咱们打开是在项目目录下找不到资源,天然就白屏了。后端
打包事后的目录结构是固定的,而 index.html 和 static 同级,固能够用相对路径引入 static 下的资源bash
配置:svg
assetsSubDirectory:'./'
配置完成后,再打包访问,文字出来,背景图片裂开了......ui
F12 发现,图片资源路径有问题:static/img/vague_bg.9cfff92.png。由于是在 css 里引入的 img,结合打包出来的目录结构,正确的应该是 /static/img/xxx,但问题是前面已经设置了 assetsSubDirectory 为相对路径.......
有补救方法,在 xxx.css 里面回退两个路径不就回到了 static 目录了吗?
配置 url-loader
# /build/webpack.base.conf.js 设置rules { test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, use: [ { loader: "url-loader", options: { limit: 10000, name: utils.assetsPath("img/[name].[hash:7].[ext]"), publicPath: "../../" } } ] },
设置完,再打包访问,perfect~
有些人可能会问,为何不一开始直接设置 assetsSubDirectory:'/',即根路径不也能够解决问题吗?
是的,没错,确实能够解决问题。可是我哔哩哔哩一大堆是提供一些问题的解决思路,本身踩过的坑和如何排坑的。若是设置了跟路径,那么就限死了当前资源只能在根路径了,可能项目会集成到后端项目中(也能够经过目录映射解决),不必定是在根路径下。设置当前 dist 下的资源位相对路径确保在任何环境下资源路径都没有问题。
该篇文章是 18 年刚毕业的时候遇到的问题,以前写在本身的 blog 里面,由于疏于管理本身的 blog 被黑,如今分享出来,记录本身的心路历程。
END