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

詳解如何使用webpack打包多頁jquery項目

 更新時間:2019年02月01日 09:19:29   作者:aaron_lawliet  
這篇文章主要介紹了詳解如何使用webpack打包多頁jquery項目,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

雖然已經(jīng)2019年了
不過有一些項目
還是需要用到jquery的
不過考慮到使用jquery的一堆兼容性問題
也為了可以順利地使用ES6來擼代碼
研究使用webpack+babel打包代碼來發(fā)布

幾個重點:

1.為了將模塊分割加載,不至于一個js文件過大,一個頁面中使用多個js文件
2.由于是多頁項目(多個html),每個頁面使用的js文件都不一致
基于以上兩點,需要配置多個入口文件
3.會把小圖片轉換成base64,所以可能css轉成的js文件會比較大,所以css文件都單獨設置入口js

例如,我們有三個頁面:index、share、assist

三個頁面有通用的css文件:common.css

設置入口文件時,可以這樣設置

entry: {
  // 通用css
  commoncss: path.resolve(__dirname, './src/css/common.css.js'),

  // 主頁
  indexcss: path.resolve(__dirname, './src/css/index.css.js'),
  index: path.resolve(__dirname, './src/index.js'),

  // 頁1
  sharecss: path.resolve(__dirname, './src/css/share.css.js'),
  share: path.resolve(__dirname, './src/share.js'),

  // 頁2
  assistcss: path.resolve(__dirname, './src/css/assist.css.js'),
  assist: path.resolve(__dirname, './src/assist.js'),

}

其中,common.css.js文件中,只有幾行代碼

import '../css/base.css';
import '../css/plugin.css';
import '../css/common.css';

common.css.js文件結束

由于會有一些圖片的base64,所以大小大約100+KB

類似的還有index.css.js和share.css.js和assist.css.js
index.css.js如下

import '../css/index.css';

對,就一句話

打包出來的js文件大小就看引入了多少小圖片了,一般幾百KB

然后,要使用三個webpack的插件

const HtmlWebpackPlugin = require('html-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const jquery = require('jquery');

HtmlWebpackPlugin 用于打包出多個html文件

CopyWebpackPlugin 用于img標簽,后面說

jquery 就是jquery,全局引用

webpack.config.js里的plugins配置如下

plugins: [
  new webpack.ProvidePlugin({
    $:"jquery"
  }),
  new CopyWebpackPlugin([{
    from: __dirname + '/src/public/'
  }]), // 吧src下public文件夾下的所有內容直接拷貝到dist(輸出目錄)下
  new HtmlWebpackPlugin({
    filename: 'index.htm',
    template: 'src/index.html',
    chunks: ['commoncss', 'indexcss', 'index'],
    inject: 'true',
    hash: true,
  }),
  new HtmlWebpackPlugin({
    filename: 'share.htm',
    template: 'src/share.html',
    chunks: ['commoncss', 'sharecss', 'share'],
    inject: 'true',
    hash: true,
  }),
  new HtmlWebpackPlugin({
    filename: 'assist.htm',
    template: 'src/assist.html',
    chunks: ['commoncss', 'assistcss', 'assist'],
    inject: 'true',
    hash: true,
  })
]

src目錄下的文件如下

index.js assist.js share.js是三個文件分別的入口文件

index.html assist.html share.html是三個文件的模板,html代碼可以寫在這里(當然想用模板文件也是可以的,只要HtmlWebpackPlugin插件支持)

dist文件夾如下


(為什么是htm而不是html,是為了便于讀者區(qū)分模板文件和輸出文件)

我們知道,webpack打包不會打包HtmlWebpackPlugin的template里的img標簽下的圖片,所以在html里使用了img標簽的圖片都要放在public文件夾下,CopyWebpackPlugin這個組件會直接把圖片復制過去

關于HtmlWebpackPlugin的具體參數(shù)的細則可以上網(wǎng)搜一下,很多這方面的內容
其他的比如loader、babel不在這篇文章想說的重點之列,不贅述

最后,附上webpack.config.js文件

 let actName = 'yourProjectName';// 
  let actKV = {
    name: actName,
    entry: {
      // 通用css
      commoncss: path.resolve(__dirname, './src/css/common.css.js'),

      // 主頁
      indexcss: path.resolve(__dirname, './src/css/index.css.js'),
      index: path.resolve(__dirname, './src/index.js'),

      // 分享頁1
      sharecss: path.resolve(__dirname, './src/css/share.css.js'),
      share: path.resolve(__dirname, './src/share.js'),

      // 分享頁2
      assistcss: path.resolve(__dirname, './src/css/assist.css.js'),
      assist: path.resolve(__dirname, './src/assist.js'),

    }
  };
  

  return {
    entry: actKV.entry,
    target: "web",
    output: {
      path: path.resolve(__dirname + '/dist/'+actName),
      // publicPath: '.\\',
      filename: 'js/[name].js',
      // chunkFilename: "[name].chunk.[hash].js",
    },
    plugins: [
      new webpack.ProvidePlugin({
        $:"jquery"
      }),
      new CopyWebpackPlugin([{
        from: __dirname + '/src/public/'
      }]),
      new HtmlWebpackPlugin({
        filename: 'index.htm',
        template: 'src/index.html',
        chunks: ['commoncss', 'indexcss', 'index'],
        inject: 'true',
        hash: true,
      }),
      new HtmlWebpackPlugin({
        filename: 'share.htm',
        template: 'src/share.html',
        chunks: ['commoncss', 'sharecss', 'share'],
        inject: 'true',
        hash: true,
      }),
      new HtmlWebpackPlugin({
        filename: 'assist.htm',
        template: 'src/assist.html',
        chunks: ['commoncss', 'assistcss', 'assist'],
        inject: 'true',
        hash: true,
      })
    ],
    mode: 'development',
    node: {
      __filename: true,
      __dirname: true
    },
    devtool: isProduction ? 'source-map':'inline-source-map',
    devServer:{
      inline: true,
      open: true, 
      historyApiFallback: true, 
      // host: ip.address(),
      host: 'localhost',
      progress: true,
      contentBase: "./dist/",
      port: 3430,
      historyApiFallback:true,
      publicPath:'/src/',
      proxy: {
        '*': {
          target: 'http://127.0.0.1:3430',
          secure: false
        }
      },
    },
    resolve: {
      alias: {
      },
      extensions: ['.js', '.less', '.css', '.vue', '.jsx'],
    },
    externals: {
    },
    module: {
      rules: [{
        test: /\.vue$/,
        loader: 'vue-loader',
      }, {
        test: /\.js$/,
        include: path.join(__dirname,'/src'),
        exclude: path.resolve(__dirname, 'node_modules'),
        use:[
          {
            loader: 'babel-loader',
            query: {
              presets: ['es2015']
            }
          }
        ]
      }, {
        test: /\.xml$/,
        loader: "xml-loader"
      }, {
        test: /\.(css|less)$/,
        loader: "style-loader!css-loader",
      }, 
      {
        test: /\.(png|jpg|jpeg|gif|icon|webp)$/,
        loader: 'url-loader',
        options: {
          limit: 16384,
          name: 'images/[name].[hash:5].[ext]',
        }
      },
      {
        test: /\.(woff|woff2|svg|eot|ttf)\??.*$/,
        loader: "file-loader?&name=assets/fonts/[name].[ext]"
      }, {
        test: /\.txt$/,
        loader: "text-loader"
      },{
        test: /\.jsx$/,
        exclude: /node_modules/,
        loaders: ['jsx-loader', 'babel-loader']
      }]
    },
    
  }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 微信小程序日程預約功能實現(xiàn)

    微信小程序日程預約功能實現(xiàn)

    本文介紹了如何使用微信小程序開發(fā)一個日程預約系統(tǒng),該系統(tǒng)包括頂部日期選擇器、中部的canvas繪制區(qū)和底部的數(shù)據(jù)回顯區(qū),本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2025-02-02
  • js斷點調試心得分享(必看篇)

    js斷點調試心得分享(必看篇)

    下面小編就為大家分享一篇js斷點調試心得,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • JavaScript偽數(shù)組用法實例分析

    JavaScript偽數(shù)組用法實例分析

    這篇文章主要介紹了JavaScript偽數(shù)組用法,結合實例形式分析了偽數(shù)組的概念、功能、定義及簡單使用方法,需要的朋友可以參考下
    2017-12-12
  • 得到元素真實的背景顏色的js代碼

    得到元素真實的背景顏色的js代碼

    這個函數(shù)來自Rico,Longbill及Dnew.cn修改。 說明: 傳入?yún)?shù)一個,為元素的id值或元素本身,返回為元素的真實背景色值(字符串)。背景值均為16進制的值(原代碼是是IE里面返回的是16進制的值,而Mozilla則是rgb值,Dnew.cn將其修改為均返回16進制的值)。
    2007-12-12
  • javascript如何讀寫本地sqlite數(shù)據(jù)庫

    javascript如何讀寫本地sqlite數(shù)據(jù)庫

    這篇文章主要介紹了javascript如何讀寫本地sqlite數(shù)據(jù)庫問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • JavaScript實現(xiàn)圖片懶加載(Lazyload)

    JavaScript實現(xiàn)圖片懶加載(Lazyload)

    這篇文章主要介紹了JavaScript實現(xiàn)圖片懶加載(Lazyload)的相關資料,需要的朋友可以參考下
    2016-11-11
  • JavaScript前補零操作實例

    JavaScript前補零操作實例

    這篇文章主要介紹了JavaScript前補零操作的方法,以實例形式對比分析了javascript實現(xiàn)補零操作的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • JavaScript

    JavaScript"模擬事件"的注意要點詳解

    今天小編就為大家分享一篇關于JavaScript"模擬事件"的注意要點詳解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • 簡單實現(xiàn)js選項卡切換效果

    簡單實現(xiàn)js選項卡切換效果

    這篇文章主要為大家介紹了簡單實現(xiàn)js選項卡切換效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-02-02
  • 上傳圖片js判斷圖片尺寸和格式兼容IE

    上傳圖片js判斷圖片尺寸和格式兼容IE

    這篇文章主要介紹了上傳圖片js判斷圖片尺寸和格式并兼容IE,需要的朋友可以參考下
    2014-09-09

最新評論

山丹县| 泾源县| 尼木县| 棋牌| 新河县| 永宁县| 英德市| 郎溪县| 宁南县| 墨脱县| 望谟县| 许昌县| 千阳县| 无为县| 积石山| 虎林市| 连江县| 大庆市| 新绛县| 荣昌县| 黔西| 磐安县| 勃利县| 广灵县| 石台县| 嘉荫县| 正镶白旗| 五寨县| 扎囊县| 隆昌县| 桂林市| 太白县| 崇义县| 阳谷县| 安福县| 油尖旺区| 徐州市| 丹凤县| 安顺市| 遂溪县| 虞城县|