vue2.x webpack打包资源路径问题

引言:

vue在dev环境下能正常运行,但build后就出现了图片等资源加载不出来的情况。最近爱上了连体字体(ligature feature),就是输入<=自动可以连体为≤的等宽控制台字体。有JetBrain Mono、Fira Code、Cascadia Code(Windows Terminal的默认字体),扯远了。我想通过css的方式让网页加载这种字体,但是遇到了困难,以下是解决方法。

一、环境:

vue-cli 2.x, webpack模板

二、目录结构:


说明: 相对路径中含有assets关键字的资源会被webpack打包, 而static文件夹下的资源都不会被打包
用相对引用方式引用assets文件夹下的资源, 用绝对引用方式引用static文件夹下的资源。
assets下的资源会被webpack打包,会在资源名上加上一串字符,如JetBrainsMono-Regular-9a5b27d.woff

三、关键配置文件:

1. config/index.js:

build: {
    env: require("./prod.env.js"),
    index: path.resolve(__dirname, "../dist/index.html"),
    assetsRoot: path.resolve(__dirname, "../dist/"),
    assetsSubDirectory: "static",
    assetsPublicPath: "./",
    productionSourceMap: true,
    devtool: "#source-map",
    productionGzip: false,
    productionGzipExtensions: ["js", "css"],
    bundleAnalyzerReport: process.env.npm_config_report
}

2. build/utils.js:

if (options.extract) {
      return ExtractTextPlugin.extract({
        use: loaders,
        fallback: 'vue-style-loader',
        publicPath: "../../"
      })
    } else {
      return ['vue-style-loader'].concat(loaders)
}

四、使用:

1. App.vue的css里面引用字体文件:

@font-face {     
  font-family: "JetBrains Mono"; 
    src: url("./assets/fonts/JetBrainsMono-Regular.woff"); 
}

2. 标签src引用图片:

<img src="../assets/img/snower.png" />

五、小结:

assets里面的资源一定要相对引用, /assets/... 绝对引用方式会产生路径问题

原文地址:https://www.cnblogs.com/xfk1999/p/vue-build-resource-path-problem.html