最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

webpack多頁(yè)面開(kāi)發(fā)實(shí)踐

 更新時(shí)間:2017年12月18日 13:59:44   作者:小清新純  
這篇文章主要介紹了webpack多頁(yè)面開(kāi)發(fā)實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

寫(xiě)在前面

webpack是一款模塊加載器兼打包工具,能把js,css,頁(yè)面,圖片,視頻等各種資源,進(jìn)行模塊化處理。而現(xiàn)在網(wǎng)上流傳很多單頁(yè)面的webpack模型,那多頁(yè)面呢?比較少,現(xiàn)在我提供一個(gè)多頁(yè)面的前端模型。希望大家適合使用。

在最開(kāi)始接觸webpack的時(shí)候,我都覺(jué)得webpack只適用于單頁(yè)面應(yīng)用,比如webpack+react,webpack+vue。我自己在使用webpack+vue構(gòu)建項(xiàng)目及開(kāi)發(fā)的過(guò)程中感受到了webpack的強(qiáng)大和方便。基于實(shí)際項(xiàng)目需求,我在想,多頁(yè)面站點(diǎn)是否也能使用webapck來(lái)構(gòu)建呢?于是就開(kāi)始了一番探索,最終算是搭建了一套比較完整的解決方案。

本文以一個(gè)實(shí)際項(xiàng)目為例子,講述在多頁(yè)面項(xiàng)目中如何使用webpack進(jìn)行工程化構(gòu)建。本文是自己的實(shí)踐經(jīng)驗(yàn)總結(jié),所以有些解決方案并不是最優(yōu)的,仍在探索優(yōu)化中,如果有什么錯(cuò)誤紕漏,歡迎指出。

簡(jiǎn)介

本項(xiàng)目主要基于webpack2.x構(gòu)建,以gulp作為輔助工具。前端使用art-template作為模板引擎,一個(gè)頁(yè)面對(duì)應(yīng)一個(gè)模板文件和一個(gè)入口文件,入口文件中可以通過(guò)import或require引入其他模塊,這些模塊webpack會(huì)自動(dòng)跟入口文件合并為一個(gè)文件。

前端開(kāi)發(fā)環(huán)境搭建

主要目錄結(jié)構(gòu)

├─dist          #打包后生成的文件目錄
└─src           #開(kāi)發(fā)目錄
  ├─components     #通用組件
  ├─static       #靜態(tài)資源目錄
  │ ├─css
  │ ├─img
  │ └─js
  │   ├─component  #站點(diǎn)通用組件對(duì)應(yīng)的js
  │   ├─lib     #第三方j(luò)s庫(kù)
  │   ├─services   #各頁(yè)面入口
  │   └─util     #通用工具js
  ├─template      #html模板
  └─views        #頁(yè)面
   main.js       #公共入口
gulpfile.js        #gulp任務(wù)配置
package.json       #項(xiàng)目依賴(lài)
webpack.config.js     #webpack配置

webpack配置

入口文件

// 獲取入口文件
var entries = (function() {
  var jsDir = path.resolve(__dirname, 'src/static/js/services');
  var entryFiles = glob.sync(jsDir + '/*.js');
  var map = {};

  entryFiles.forEach(function(filePath) {
    var filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'));
    map[filename] = filePath;
  });
  return map;
})();

該方法將生成文件名到文件絕對(duì)路徑的map, 比如

entry: {
  'page-1': '/../webpack-multipage-demo/src/static/js/services/page-1.js'
}

熱更新

熱更新簡(jiǎn)直不要太好用,極大地提高了開(kāi)發(fā)效率。

//服務(wù)器配置
var devServer = env === 'production' ? {} : {
  contentBase: path.resolve(__dirname),
  compress: true,
  historyApiFallback: true,
  hot: true,
  inline: true,
  host: 'localhost', 
  port: 8080
};

另外,在plugin中加入new webpack.HotModuleReplacementPlugin(),開(kāi)啟Hot Module Replacemen,即可實(shí)現(xiàn)熱更新。

生成html配置

約定同一頁(yè)面的js文件與模板文件命名一致,最終根據(jù)該js生成與其同名的html文件。

var htmlPages = (function() {
  var artDir = path.resolve(__dirname, 'src/views');
  var artFiles = glob.sync(artDir + '/*.art');
  var array = [];
  artFiles.forEach(function(filePath) {
    var filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'));
    array.push(new HtmlWebpackPlugin({
      template: path.resolve(__dirname, 'src/template/index.html'),
      filename: filename + '.html',
      chunks: ['vendor', 'main', filename],
      chunksSortMode: function(chunk1, chunk2) {
        var order = ['vendor', 'main', filename];
        var order1 = order.indexOf(chunk1.names[0]);
        var order2 = order.indexOf(chunk2.names[0]);
        return order1 - order2;
      },
      minify: {
        removeComments: env === 'production' ? true : false,
        collapseWhitespace: env === 'production' ? true : false
      }
    }));
  });
  return array;
})();

通用模塊提取為組件

對(duì)于一些在多個(gè)頁(yè)面中都需要用到的模塊,可將其提取出來(lái)作為通用的組件。組件的構(gòu)成與頁(yè)面一樣,一個(gè).js文件和一個(gè).art文件以及一個(gè).css文件,在js文件中渲染html內(nèi)容,最后export,使用時(shí)直接require即可。具體實(shí)踐可參考demo

存在問(wèn)題

  1. 每新建一個(gè)頁(yè)面就需要重新啟動(dòng)webpack服務(wù)
  2. 字體文件無(wú)法壓縮,對(duì)于壓縮通過(guò)font-face引入的網(wǎng)絡(luò)字體,目前沒(méi)有找到較好的解決方案

demo

基于本文理論的一個(gè)demo,地址:webpack-multipage-demo

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • ListBox實(shí)現(xiàn)上移,下移,左移,右移的簡(jiǎn)單實(shí)例

    ListBox實(shí)現(xiàn)上移,下移,左移,右移的簡(jiǎn)單實(shí)例

    這篇文章主要介紹了ListBox實(shí)現(xiàn)上移,下移,左移,右移的簡(jiǎn)單實(shí)例。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2014-02-02
  • Webpack打包字體font-awesome的方法示例

    Webpack打包字體font-awesome的方法示例

    本篇文章主要介紹了Webpack打包字體font-awesome的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • JavaScript中eval函數(shù)的問(wèn)題

    JavaScript中eval函數(shù)的問(wèn)題

    這篇文章主要介紹了JavaScript中eval函數(shù)的問(wèn)題,需要的朋友可以參考下
    2016-01-01
  • 微信小程序?qū)崿F(xiàn)折疊面板

    微信小程序?qū)崿F(xiàn)折疊面板

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)折疊面板的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • JavaScript獲取字符串實(shí)際長(zhǎng)度(包含中英文)

    JavaScript獲取字符串實(shí)際長(zhǎng)度(包含中英文)

    這篇文章介紹了JavaScript獲取字符串實(shí)際長(zhǎng)度(包含中英文)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • JavaScrip報(bào)錯(cuò):module?is?not?defined的原因及解決

    JavaScrip報(bào)錯(cuò):module?is?not?defined的原因及解決

    這篇文章主要給大家介紹了關(guān)于JavaScrip報(bào)錯(cuò):module?is?not?defined的原因及解決方法,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • js阻止冒泡和默認(rèn)事件(默認(rèn)行為)詳解

    js阻止冒泡和默認(rèn)事件(默認(rèn)行為)詳解

    這篇文章主要為大家詳細(xì)介紹了js阻止冒泡和默認(rèn)事件,即默認(rèn)行為,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 微信小程序開(kāi)發(fā)之表單驗(yàn)證WxValidate使用

    微信小程序開(kāi)發(fā)之表單驗(yàn)證WxValidate使用

    本文主要介紹了微信小程序開(kāi)發(fā)之表單驗(yàn)證WxValidate使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • JavaScript 獲得選中文本內(nèi)容的方法

    JavaScript 獲得選中文本內(nèi)容的方法

    今天希望實(shí)現(xiàn)一個(gè),直接在網(wǎng)頁(yè)上選中文本,點(diǎn)擊收藏夾的鏈接(javascript)即可彈出新窗口(類(lèi)似“百度搜藏”和“QQ書(shū)簽”),新窗口中的文本框即顯示了選中的文本。
    2009-02-02
  • JavaScript之WebSocket技術(shù)詳解

    JavaScript之WebSocket技術(shù)詳解

    這篇文章主要為大家詳細(xì)介紹了JavaScript之WebSocket技術(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11

最新評(píng)論

灵丘县| 乐平市| 东至县| 广水市| 奉新县| 邵阳市| 扶风县| 建水县| 资溪县| 柞水县| 合川市| 闵行区| 遵义市| 洛南县| 呼玛县| 常熟市| 莱州市| 丘北县| 翁牛特旗| 普洱| 牙克石市| 安溪县| 赤水市| 高州市| 通江县| 小金县| 筠连县| 廉江市| 宜丰县| 泗洪县| 明星| 和林格尔县| 和林格尔县| 武威市| 花莲县| 康乐县| 诸城市| 海伦市| 红河县| 云和县| 巴塘县|