中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

webpack3.X中如何實現多頁面打包

發布時間:2021-08-13 09:48:10 來源:億速云 閱讀:120 作者:小新 欄目:web開發

這篇文章將為大家詳細講解有關webpack3.X中如何實現多頁面打包,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

單頁面打包

我們知道要打包單頁面的方法,很簡單,配置入口,和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
   }
  })
 ]
}

上面的配置就是打包一個單頁面的代碼,具體配置項的意思請參考HTMLWebpackPlugin;

如何打包多頁面

在學了webpack之后,我的感受是我會配置webpack了,也能運行了,但是學習的過程中都是單頁面的,那么多頁是如何打包的呢?其實多頁面的打包和單頁面的打包的原理是一樣的,只是多配置幾個對應的入口,和出口,以及HtmlWebpackPlugin對象;當然你完全可以像下面這樣:

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
   }
  })
 ]
}

細心的你肯定發現我改變了幾個地方,一是,把output.filename的‘js/index.js'變成了‘js/[name].js',這是因為我們是多頁面,每個頁面對應相應的js這樣方便管理,二是,在HtmlWebpackPlugin對象中添加了chunks這個屬性,chunk屬性是讓你選擇對應的js模塊;

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

首先,我們通過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);//當前目錄
  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;
}

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

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

上面我們就配置好了入口,不需要我們手動添加了,有多少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頁面,和添加對應頁面的HTMLWebpackPlugin對象;

關于“webpack3.X中如何實現多頁面打包”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

孟津县| 宁都县| 银川市| 界首市| 都江堰市| 本溪| 宜章县| 增城市| 洛扎县| 开阳县| 津南区| 麻栗坡县| 铜鼓县| 达日县| 常山县| 古浪县| 乃东县| 宜阳县| 石泉县| 闻喜县| 临沭县| 新宁县| 琼结县| 油尖旺区| 洞头县| 双峰县| 宁夏| 扎鲁特旗| 西丰县| 高碑店市| 葫芦岛市| 平阳县| 包头市| 交城县| 石屏县| 嘉黎县| 封开县| 南昌市| 丰台区| 正定县| 内乡县|