webpack入门学习笔记12 —— 打包编译后文件的引入路径问题

1. 写在前面

在一些基于Webpack的项目中,我们可能会遇到这个情况:使用本地开发服务器开发项目的时候,项目可以正常运行,所需要的资源也能正常请求到。但是项目经打包编译,部署到服务器上之后,会报错一些 404 的错误,显示一些图片文件、css文件或js文件等找不到。

这是因为打包后的项目文件的引用路径问题,如果我们不做额外配置,打包编译后得到的 .html 文件的代码如下:

<!DOCTYPE html>
<html lang=en>

<head>
    <meta charset=UTF-8>
    <meta name=viewport content="width=device-width,initial-scale=1">
    <meta http-equiv=X-UA-Compatible content="ie=edge">
    <title>Document</title>
    <link href=css/main.css rel=stylesheet>     <!-- 注意这里的文件引入路径 -->
</head>

<body>
    <img src=logo.png alt="">       <!-- 注意这里的文件引入路径 -->
    <script type=text/javascript src=index.js></script>     <!-- 注意这里的文件引入路径 -->
</body>

</html>

这个时候,如果是在本地开发服务器中查看项目,是没有问题的。因为在本地开发服务器下,有且只有我们当前开发的这一个项目,并且项目所需要的文件,也都可以通过开发服务器的根域名获取到。比如可以直接通过 localhost:8080/css/main.css 找到相关文件。

但是真实的服务器上可能有很多项目,想要访问项目文件,需要通过 域名+项目目录 来访问,比如 www.fengzhen8023.com/myProject/css/main/css 来访问。

但是如上面 .html 文件所示,文件的引入路径中,没有项目目录名。所以会直接到根域名下找所需要的资源,那么最终肯定是获取不到,报出一些404的错误。

所以根据服务器部署的实际情况,我们在打包编译项目的时候,需要做一些额外配置,使得在引入文件资源的时候,在前面加一些路径,比如域名或者项目文件名等,使得文件可以被正常引入。

这也是本篇博客的主要内容,包括两个方面:

  • 在所有的文件引用路径中,添加前缀域名
  • 单独给图片文件引用路径中,添加前缀域名

2. 在所有的文件引用路径中,添加前缀域名

为了达到这个目的,我们需要在 webpack.config.js 文件中进行配置,配置的方法非常简单,这里直接给出代码:

module.exports = {
    /* 节省篇幅,其他配置已省略 */ 
    output: { 
        filename: "index.js", // 出口文件的文件名
        path: path.resolve(__dirname, "build"), //出口文件的路径,注意一定要是绝对路径
        publicPath: 'http://www.fengzhen8023.com/myProject/'    // 给所有的文件引用路径中,添加前缀域名
    }
}

这里将其他的配置规则省略了,如果你想看其他的配置规则,可以查看我的 GitHub仓库 - webpack-learning ,或者通过本文末尾的链接,跳转到我之前的博客中进行查看。

配置完成之后,再次进行打包编译项目,得到的 .html 文件如下:

<!DOCTYPE html>
<html lang=en>

<head>
    <meta charset=UTF-8>
    <meta name=viewport content="width=device-width,initial-scale=1">
    <meta http-equiv=X-UA-Compatible content="ie=edge">
    <title>Document</title>
    <link href=http://www.fengzhen8023.com/myProject/css/main.css rel=stylesheet>       <!-- 注意这里的文件引入路径 -->
</head>

<body>
    <img src=http://www.fengzhen8023.com/myProject/logo.png alt="">     <!-- 注意这里的文件引入路径 -->
    <script type=text/javascript src=http://www.fengzhen8023.com/myProject/index.js></script>       <!-- 注意这里的文件引入路径 -->
</body>

</html>

如此,部署到服务器上的项目,就可以正常访问所需要的文件了。

3. 单独给图片文件引用路径中,添加前缀域名

在上一节中,我们知道如何给项目中所需要引入的文件添加前缀,这里在介绍,如何单独给图片资源引用路径添加前缀域名,使得项目更具灵活性。

这个时候需要使用到一个laoder—— url-loader,使用之前首先要进行安装,命令如下:

yarn add url-loader -D

安装完成之后,在 webpack.config.js 中进行如下配置:

module.exports = {
    /* 节省篇幅,其他配置已省略 */ 
    module: {
        rules: [
            {
                test: /\.(png|jpg|jpeg|gif)$/,
                use: {
                    loader: 'url-loader',
                    options: {
                        limit: 2 * 1024, // 小于2k的图片,直接使用Base64编码进行处理
                        outputPath: '/image/'
                    }
                }
            }
        ]
    }
}

关于url-loader和Base64的相关介绍,大家可以查看我的上一篇博客: 在项目中对打包编译的文件进行分类,里面有较为详细的介绍。

配置完成,再次编译项目的时候,得到的 .html 文件中的代码如下:

<!DOCTYPE html>
<html lang=en>

<head>
    <meta charset=UTF-8>
    <meta name=viewport content="width=device-width,initial-scale=1">
    <meta http-equiv=X-UA-Compatible content="ie=edge">
    <title>Document</title>
    <link href=css/main.css rel=stylesheet> <!-- css文件引用路径没有做处理 -->
</head>

<body>
    <img src=/image/logo.png alt=""> <!-- 注意这的图片的引用路径 -->
    <script type=text/javascript src=index.js></script> <!-- js文件引用路径没有做处理 -->
</body>

</html>

4. 写在最后

以上便是这篇博客的全部内容,如果你想对其他的文件单独进行引用路径的修改,可以查阅相关的文档,不过大致思路是:

给处理这些文件的loader配置相关的属性,来指定打包编译后,文件的引用路径。

上一篇: webpack入门学习笔记11 —— 在项目中对打包编译的文件进行分类

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,547评论 4 374
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,787评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,175评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,752评论 0 223
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,169评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,056评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,195评论 2 321
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,980评论 0 214
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,724评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,872评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,344评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,667评论 3 264
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,379评论 3 245
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,202评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,992评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,189评论 2 286
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,987评论 2 279

推荐阅读更多精彩内容