webpack入门学习笔记13 —— 使用Webpack打包多页面应用

1. 写在前面

如果你熟悉Vue或者React的话,那么你肯定知道使用这些框架创建的应用属于 单页面应用 。这些框架底层使用的就是Webpack来构建项目,通过对项目文件进行打包编译,最终生成一个 .html 文件,所以我们说这些应用属于 单页面应用

但是在使用webpack进行构建项目的时候,不仅可以构建单页面应用,还可以构建多页面应用。

在实际的项目中,如果该项目初期使用的就是 脚手架(比如Vue脚手架或者React脚手架) 搭建起来的,那么该项目大多是单页面应用。

但是如果项目在前期不是使用 脚手架 搭建起来的,比如使用 jQuery 库来开发的。但是后期有几个大的业务逻辑,需要使用 Vue脚手架 或者是 React脚手架 来开发,这个时候可能就需要使用Webpack来构建多页面应用,每一个大的业务逻辑对应一个单页面应用。

所以在这篇博客中,我就来跟大家介绍一下如何使用Webpak,构建多页面应用。主要内容包括:

  • 如何通过打包编译,生成不同的 .js 文件
  • 如何在 .html 文件中,引入指定的 .js 文件

2. 如何通过打包编译,生成不同的 .js 文件

如果你看过我之前的博客,那么你就会知道在 webpack.config.js 文件中,有以下的配置:

module.exports = {
    entry: "./src/index.js", // 打包的入口文件,默认是src目录下的index.js文件
    output: { // 配置文件默认是dist目录下的main.js文件
        filename: "index.js", // 出口文件的文件名
        path: path.resolve(__dirname, "build"), //出口文件的路径,注意一定要是绝对路径
    }
}

通过以上的配置,webpack就可以找到项目的入口文件(./src/index.js)来对项目进行打包编译,最终生成的就是一个单页面应用。这就给我们提供一个思路:如果我们想要使用webpack打包编译,生成多页面应用,也要通过修改这两个配置属性来完成。

想要构建多页面应用,配置方式非常简单,这里直接给出配置代码,然后再作出解释:

module.exports = {
    entry: {    // 指定入口文件
        'home': "./src/index.js",   
        'other': "./src/other.js"
    }, 
    output: { // 配置文件默认是dist目录下的main.js文件
        filename: "[name].js", // 出口文件的文件名
        path: path.resolve(__dirname, "build"), //出口文件的路径,注意一定要是绝对路径
    },
}

通过上面的代码,我们可以看到,entry 属性的值由字符串变为了对象。在该对象中,我们配置了两个属性,这就表明,我们准备使用webpack来构建 两个 单页面应用,分别是 home 应用和 other 应用。他们都有一个对应的入口文件,webpack在打包编译的时候,就是从他们的入口文件触发,分别构建对应的单页面应用。

同时我们还修改了 output.filename 这个属性,不再是固定的 index.js,而是 [name].js 。这样就可以通过 entry对象 的两个属性(即home和other)来动态生成对应的 .js 文件。

现在你可以在 src文件夹 下创建两个入口文件 index.jsother.js ,在里面写对应的代码,然后执行webpack的 build 命令,就可以进行打包编译,最终会生成两个文件,即 index.jsother.js ,到这一步多页面应用的 .js 文件已经构建完成了。

3. 如何在 .html 文件中,引入指定的 .js 文件

现在多页面应用的 .js 文件已经构建完成,但是我们还需要在 .html 文件中引入 .js 文件,多页面应用才算是正式完成,所以这一节我们介绍如何在 .html 文件中引入 .js 文件。

想要达到这个目的,我们需要解除 html-webpack-plugin 这一插件的帮助,首先执行以下代码进行安装:

yarn add html-webpack-plugin -D

安装完成之后,到 webpack.config.js 文件中做以下配置:

let HtmlWebpackPlugin = requier('html-webpack-plugin')

module.exports = {
    /* 节省篇幅,其余配置已省略 */
    plugins: [
        new HtmlWebpackPlugin({
            template: './index.html',
            filename: 'home.html',
            chunks: ['home']
        }),
        new HtmlWebpackPlugin({
            template: './index.html',
            filename: 'other.html',
            chunks: ['other']
            // chunks: ['other', 'home']    // 也可以引入多个 .js 文件
        }),
    ]
}

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

因为我们这里构建的是两个单页面应用,所以这里要创建两个 HtmlWebpackPlugin 对象,在每个对象中,都有三个属性,这里一一对这些属性做出解释:

  • template: 这是模板文件,webpack会在这个文件中,通过 <script src=""></script> 标签引入打包编译生成的 .js 文件,生成最终的 .html 页面文件。
  • filename: 在模板文件中引入 .js 文件,会生成一个新的 .html 文件,通过 filename 属性,可以指定生成的 .html 文件的名称。
  • chunks: 现在模板文件和打包编译的 .js 文件都已经有了,但是要在模板文件中引入哪些 .js 文件呢?可以通过 chunks 属性来指定。我们可以通过数组的形式,指定一个或多个 .js 文件,这样就可以在模板文件中引入一个或多个 .js 文件。

有了上面的配置,现在执行webpack的 build 命令,就可以进行打包编译,最终最终会生成 home.htmlother.html 两个文件,也就是两个单页面应用。如此一来,我们就使用webpack成功构建了多页面应用。

4. 写在最后

到此为止,我们如何使用webpack构建多页面应用,并且生成了对应的 .html 文件,现在到项目中,使用这些 .html 文件,就可以使用我们开发的应用了。

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

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