国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

webpack 3.X學(xué)習(xí)之多頁面打包的方法

2024-05-06 16:45:56
字體:
供稿:網(wǎng)友

簡介

我們開發(fā)不可能只寫一個(gè)頁面,每次都要寫很多頁面,這時(shí)為了開發(fā)效率,我們使用前端自動(dòng)化工具webpack,那么webpack是如何打包頁面的呢?又是如何打包多頁面的呢?

單頁面打包

我們知道要打包單頁面的方法,很簡單,配置入口,和html插件,

const HtmlWebpackPlugin = require('html-webpack-plugin');const config = { entry:{  index:'./src/index.js' }, output:{  path: path.join(__dirname, 'dist'),  filename: 'js/index.js' } ... plugins:[  new HtmlWebpackPlugin({   filename: 'index.html',   template: './src/index.html',   hash: true,   minify: {    removeAttributeQuotes:true,    removeComments: true,    collapseWhitespace: true,    removeScriptTypeAttributes:true,    removeStyleLinkTypeAttributes:true   }  }) ]}

上面的配置就是打包一個(gè)單頁面的代碼,具體配置項(xiàng)的意思請參考HTMLWebpackPlugin;

如何打包多頁面

在學(xué)了webpack之后,我的感受是我會(huì)配置webpack了,也能運(yùn)行了,但是學(xué)習(xí)的過程中都是單頁面的,那么多頁是如何打包的呢?其實(shí)多頁面的打包和單頁面的打包的原理是一樣的,只是多配置幾個(gè)對應(yīng)的入口,和出口,以及HtmlWebpackPlugin對象;當(dāng)然你完全可以像下面這樣:

const config = { entry:{  index:'./src/index.js',  info:'./src/index.js' }, output:{  path: path.join(__dirname, 'dist'),  filename: 'js/[name].js' } ... plugins:[  new HtmlWebpackPlugin({   filename: 'index.html',   template: './src/index.html',   chunks:['index'],   hash: true,   minify: {    removeAttributeQuotes:true,    removeComments: true,    collapseWhitespace: true,    removeScriptTypeAttributes:true,    removeStyleLinkTypeAttributes:true   }  }),  new HtmlWebpackPlugin({   filename: 'info.html',   template: './src/info.html',   hash: true,   chunks:['info'],   minify: {    removeAttributeQuotes:true,    removeComments: true,    collapseWhitespace: true,    removeScriptTypeAttributes:true,    removeStyleLinkTypeAttributes:true   }  }) ]}

細(xì)心的你肯定發(fā)現(xiàn)我改變了幾個(gè)地方,一是,把output.filename的‘js/index.js'變成了‘js/[name].js',這是因?yàn)槲覀兪嵌囗撁妫總€(gè)頁面對應(yīng)相應(yīng)的js這樣方便管理,二是,在HtmlWebpackPlugin對象中添加了chunks這個(gè)屬性,chunk屬性是讓你選擇對應(yīng)的js模塊;

上面這種寫法當(dāng)然是沒有問題,這是只有兩個(gè)頁面無所謂,那么有十個(gè)甚至更多呢,我們一直做著重復(fù)的事,這不是我們程序員的風(fēng)格,我們就是為了能夠偷懶才做程序員的不是嗎?(當(dāng)然還有高工資(#^.^#)),接下來我們來抽離這些重復(fù)的事;

首先,我們通過Node的glob對象,來獲取我們存在的html或js;

/**** @param {string} globPath 文件的路徑* @returns entries*/function getView(globPath,flag){ let files = glob.sync(globPath); let entries = {}, entry, dirname, basename, pathname, extname; files.forEach(item => {  entry = item;  dirname = path.dirname(entry);//當(dāng)前目錄  extname = path.extname(entry);//后綴  basename = path.basename(entry, extname);//文件名  pathname = path.join(dirname, basename);//文件路徑  if (extname === '.html') {   entries[pathname] = './' + entry;  } else if (extname === '.js') {   entries[basename] = entry;  } }); return entries;}

既然,我們已經(jīng)有了getView()函數(shù),可以獲取html和js文件,那么我們就可以確定有多少個(gè)入口,和多少個(gè)頁面;
let entriesObj = getView('./src/js/*.js');

let config = { entry:entriesObj, ...}

上面我們就配置好了入口,不需要我們手動(dòng)添加了,有多少js就有多少入口;

let pages = Object.keys(getView('./src/*html'));pages.forEach(pathname => { let htmlname = pathname.split('src//')[1]; let conf = {  filename: `${htmlname}.html`,  template: `${pathname}.html`,  hash: true,  chunks:[htmlname],  minify: {   removeAttributeQuotes:true,   removeComments: true,   collapseWhitespace: true,   removeScriptTypeAttributes:true,   removeStyleLinkTypeAttributes:true  } } config.plugins.push(new HtmlWebpackPlugin(conf));});

最后,我們獲取HTML頁面,和添加對應(yīng)頁面的HTMLWebpackPlugin對象;

后記

通過以上的三個(gè)步驟,就可以配置好一個(gè)可以打包多頁面的webpack工具;本人的水平比較有限,在書寫的過程中,可能有很多說的比較模糊,請多多包涵,也請大神拍磚,多多指教

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乌拉特中旗| 依兰县| 乌拉特前旗| 九龙坡区| 固原市| 淮北市| 娄烦县| 石狮市| 山阴县| 汉阴县| 玉山县| 海淀区| 当阳市| 五寨县| 淳安县| 新泰市| 孝昌县| 定陶县| 茶陵县| 黄梅县| 银川市| 蒲江县| 广宗县| 武隆县| 苏尼特左旗| 苍山县| 麦盖提县| 贵德县| 临桂县| 西华县| 奇台县| 句容市| 澄迈县| 大悟县| 柘荣县| 陵川县| 武汉市| 德庆县| 南澳县| 沙坪坝区| 门源|