搜尋
首頁web前端js教程使用webpack建立多頁應用程式的程式碼範例
使用webpack建立多頁應用程式的程式碼範例Apr 12, 2019 am 11:03 AM
javascriptnode.js

這篇文章帶給大家的內容是關於使用webpack建立多頁應用程式的程式碼範例,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

背景:隨著react, vue, angular 三大前端架構在前端領域地位的穩固,SPA應用正被應用到越來越多的專案之中。然而在某些特殊的應用場景之中,則需要使用到傳統的多頁應用程式。使用webpack進行專案工程化建置時,也需要對應到調整。

與SPA應用差異

在SPA應用程式中,使用 webpack 建置完成專案之後,會產生一個 html 文件,若干個 js 文件,以及若干個 css 檔案。在 html 檔案中,會引用所有的 js 和 css 檔案。 \
而在多頁應用程式中,使用 webpack 建置完成專案之後,會產生多個 html 文件,多個 js 文件,以及多個 css 檔案。在每個 html 檔案中,只會引用該頁面所對應的 js 和 css 檔案。

webpack設定

入口設定

多頁應用的包裝會對應多個入口 js 文件,以及多個 html 模版檔案。假設我們的開發狀態下的多頁目錄是這樣:

    |--page1
        |--index.html
        |--index.js
        |--index.less
    |--page2
        |--index.html
        |--index.js
        |--index.less

包括page1page2 兩個頁面,以及它們所對應的jsless 檔案。那麼在使用webpack 建置專案時,就有page1->index.jspage2->index.js 兩個入口文件,以及page1->index.htmlpage2->index.html 兩個模版檔案。然而在建置專案時,不可能針對每一個頁面指定一個入口配置。 \
要自動配對到所有的頁面入口及模版文件,有兩種方法。 \
\
方法一:使用 nodefs 檔案系統。來讀取父級資料夾下的所有子資料夾。透過資料夾名稱,來自動配對到所有的頁面。然而,這種方式需要保持父級資料夾下檔案的乾淨。否則就需要使用具體的判斷邏輯來過濾出所有的入口目錄。 \
\
方法二:透過設定檔來設定入口。例如:

    entry: ['page1', 'page2'];

這樣便能準確的指定出所有的入口目錄。然而卻在每次增加頁面時,都需要去更改設定檔。 \
兩種方法個有特點,可依具體情況選擇。

具體配置

entry

entry的配置需要根據我們取得到的入口資料來循環新增。

    const entryData = {};
    entry.forEach(function (item) {
        entryData[item] = path.join(__dirname, `../src/pages/${item}/index.js`);
    })
output

output的設定和SPA應用程式一致,不需要特殊設定。

    output: {
        filename: 'public/[name]_[chunkhash:8].js',
        path: path.join(__dirname, `../dist/`),
        publicPath: '/'
    },
HtmlWebpackPlugin

在使用 webpack 建置時。需要使用到 html-webpack-plugin 外掛程式來產生專案模版。對於需要產生多個模版的多頁應用程式來說,也需要產生多個 html 模版檔案。同樣的,使用獲取到的入口文件資料來循環添加。

    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const HtmlWebpackPluginData = [];
    entry.forEach(function (item) {
        HtmlWebpackPluginData.push(
            new HtmlWebpackPlugin({
                filename: `${item}.html`,
                template: path.join(__dirname, `../src/pages/${item}/index.html`),
                chunks: [item]
            })
        );
    })

配置中chunks 必須配置,如果不配置,會導致每個模版檔案中均引入所有的jscss 文件。指定為 entry 中的設定 name,則會只引入該入口相關的檔案。

設定組合

接下來,便是將前面的entry, output, htmlWebpackPlugin的設定組合起來,除此之外的其它配置,跟SPA應用一致,無需做單獨處理。組合如下

    modules.exports = {
        entry: { ...entryData },
        output: {
            filename: 'public/[name]_[chunkhash:8].js',
            path: path.join(__dirname, `../dist/`),
            publicPath: '/'
        },
        plugins: [
            ...HtmlWebpackPluginData
        ]
        ...
    }

完整demo可查看多頁應用demo

#

以上是使用webpack建立多頁應用程式的程式碼範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:segmentfault。如有侵權,請聯絡admin@php.cn刪除
es6数组怎么去掉重复并且重新排序es6数组怎么去掉重复并且重新排序May 05, 2022 pm 07:08 PM

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

JavaScript的Symbol类型、隐藏属性及全局注册表详解JavaScript的Symbol类型、隐藏属性及全局注册表详解Jun 02, 2022 am 11:50 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

原来利用纯CSS也能实现文字轮播与图片轮播!原来利用纯CSS也能实现文字轮播与图片轮播!Jun 10, 2022 pm 01:00 PM

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

JavaScript对象的构造函数和new操作符(实例详解)JavaScript对象的构造函数和new操作符(实例详解)May 10, 2022 pm 06:16 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

JavaScript面向对象详细解析之属性描述符JavaScript面向对象详细解析之属性描述符May 27, 2022 pm 05:29 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

javascript怎么移除元素点击事件javascript怎么移除元素点击事件Apr 11, 2022 pm 04:51 PM

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

foreach是es6里的吗foreach是es6里的吗May 05, 2022 pm 05:59 PM

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

整理总结JavaScript常见的BOM操作整理总结JavaScript常见的BOM操作Jun 01, 2022 am 11:43 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境