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

詳解webpack 入門總結和實踐(按需異步加載,css單獨打包,生成多個入口文件)

 更新時間:2017年06月20日 09:58:10   作者:StrongerSY  
本篇文章主要介紹了webpack 入門總結和實踐(按需異步加載,css單獨打包,生成多個入口文件) ,具有一定的參考價值,感興趣的小伙伴們可以參考一下

最近在項目中使用了一下webpack,所以這里打算對目前了解的使用方法做一個小小的總結

為什么是webpack

1.webpack一下自己就🔥了,這絕對是一個重要的原因。

2.然后我之前項目中都是通過requireJS,通過AMD來做到模塊化開發(fā)。webpak不僅支持打包,而且支持AMD 和 CommonJS方式來做模塊化開發(fā),所以打算嘗試一下webpack來實現模塊化。

3.我的需求簡單,適合新上手webpack,只需要生成上線目錄,實現模塊化,壓縮代碼等等

webpack實戰(zhàn)

webpack.config.js 一般寫法

開頭聲明對路徑相關的變量,以及引入依賴,包括webpack(非必須),以及需要的插件
 然后,entry 聲明入口相關的如文件名,路徑等,output 聲明生成文件相關的路徑和文件名,module 中是針對不同文件進行處理的 loader 聲明,plugins 聲明了插件的具體使用。

壓縮代碼

這里使用webpack的內置的插件,我們寫在webpack.config.js 中的plugins 部分

new webpack.optimize.UglifyJsPlugin({
  compress: {
    warnings: false
  }
})

提取公共類庫

這部分我沒有用到,但也是基于webpack 內置的插件,目的是將用到的jquery 等第三方庫整合到一個文件,否則都合并到一個文件,會造成這個文件特別大

首先在entry 聲明第三方庫

entry: {
  app: path.resolve(APP_PATH, 'index.js'),
  //添加要打包在vendeors里面的庫
  vendors: ['jquery', 'moment']
},
plugins: {
   //把入口文件里面的數組打包成vendors.js
  new webpack.optimize.CommonsChunkPlugin('vendors', 'vendors.js'),
}

css 單獨打包

有的時候需要將css 單獨打包,作為CDN,或者我這里的情況是是,頁面引入了很多的css js 文件,而我的js 在最后加載!所以如果是js 中引入的css ,那么會導致頁面在開始的時候沒有樣式,知道解析到我的js !所以這里將css 單獨打包,單獨在頁面引入!

首先需要安裝插件

npm install extract-text-webpack-plugin –save-dev

然后在webpack.config.js 中聲明插件

// 引入css 單獨打包插件
var ExtractTextPlugin = require("extract-text-webpack-plugin");
// 設置生成css 的路徑和文件名,會自動將對應entry入口js文件中引入的CSS抽出成單獨的文件
var packCSS = new ExtractTextPlugin('./css/[name].min.css'); 

在plugins 中引入并使用

 plugins: [
  packCSS
 ]

我們需要首先在js 中引用相應的css文件

 require('./css/plan.css');

然后這個插件會自動將js中的css文件提取出來,生成單獨的文件

樣式的處理

安裝 css-loader style-loader

 npm install css-loader style-loader --save-dev

css-loader會遍歷css文件,找到所有的url(...)并且處理。style-loader會把所有的樣式插入到你頁面的一個style

 module: {
   loaders: [
    { 
     test: /\.css$/,
     loaders: ['style', 'css'],
     include: APP_PATH
    }
   ]
 }

圖片的處理

安裝 url-loader

npm install url-loader --save-dev

webpack.config.js

{
  test: /\.(png|jpg)$/,
  loader: 'url?limit=8192&name=images/[hash:8].[name].[ext]'

}

limit 設置一個閾值,小于這個值得圖片就會自動啟用 base64 編碼的圖片,大于這個值的圖片會打包到name 這參數對應的路徑,圖片名稱就會包括8位md5編碼 name 對應文件本來名稱,ext 對應擴展名

我在圖片這里遇到的問題和 css 類似,都是原本我是在 js 中引入 css img 等靜態(tài)資源。但是
 因為我的頁面引入了很多的 css, js 文件,而我的js文件放到最后加載,所以會導致我的js引用的css img 在最后才加載。這會導致頁面開始的時候會出現沒有樣式,而圖片剛開始會顯示失敗的問題。

我本來也希望將 img 單獨打包,但是搜索也實踐了,沒有找到可靠地實現方式,于是我把圖片放到了其他公共資源目錄(~~~~(>_<)~~~~,只好暫時出此下策了)

一個頁面一個js 文件

我做的項目是多個頁面的,所以需要生成每個頁面對應的不同 js。這里的處理方法就是我們每個 js 都作為一個不同的入口文件現在 enrty 中。這樣設置好 output 中的公共路徑,就能得到不同的 js 文件。

  entry: {
    creative: './src/static/js/apps/idea.js',
    plan: './src/static/js/apps/plan.js',
  },
  output: {
    path: 'dist/',
    filename: 'js/[name].min.js'
  }

更新

代碼切分以及異步加載

今天遇到的問題是,我做的一個頁面是要分為四個步驟,每個步驟在進入下一步的時候需要對下一步的內容進行接口請求,頁面渲染和事件綁定等操作。

之前的做法

拆分了各個步驟對應模塊之后,我通過commonJS的方式在入口文件開頭引入了各個模塊

這時候是這樣的

  var stepOne = require('./mods/stepone.js');
  var steptwo = require('./mods/steptwo.js');
  ...

  // 使用的時候
  stepone.checkOne();

這種做法,因為commonJS 的同步加載機制,會導致入口文件打包之后非常臃腫。在首屏,用到用不到處理代碼的都會在一開始就加載,嚴重影響了首屏加載時間。

代碼切分之后

我利用webpack的code splitting 特性,將各個步驟的代碼進行拆分,實現按需加載。這里主要利用了 webpack 的 require.ensure 函數實現的。非常方便,只需要把異步加載的代碼,放到 require.ensure 里面的回調函數就可以實現:

  require.ensure(['./mods/stepone.js'], function(){
    var stepone = require('./mods/stepone.js');
    stepone.checkone();
  }, 'stepone'); // 第三個參數設置打包名稱

這樣設置,webpack 就會單獨生成拆分的文件,我們還需要設置拆分文件的名字和路徑。這里我費了一番周折。

webpack 默認給拆分的文件用數字命名,如果我們自己不進行設置,會得到 1.min.js 這樣類似的文件。我們可以在 webpack.config.js 中,通過 output.chunkFilename 來設置分塊生成文件的名稱,分塊的路徑可以通過 output.publicPath 設置。這里一定要設置 publicPath,不然得到的路徑有可能不是我們上線打包的路徑。具體我的設置如下:

  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'js/apps/[name].min.js',
    publicPath: '/dist/', // 設置require.ensure路徑
    chunkFilename: 'js/apps/[name].min.js' // 設置require.ensure 文件名
  }

總結

webpack 使用起來感覺非常新穎,也容易入手!今天總結的多是入門的內容,后續(xù)還要繼續(xù)使用~

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

相關文章

  • js+ajax實現的A*游戲路徑算法整理

    js+ajax實現的A*游戲路徑算法整理

    js+ajax實現的A*游戲路徑算法整理...
    2007-05-05
  • 詳解js幾個繞不開的事件兼容寫法

    詳解js幾個繞不開的事件兼容寫法

    本篇文章主要介紹了詳解js幾個繞不開的事件兼容寫法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • js實現鼠標移到鏈接文字彈出一個提示層的方法

    js實現鼠標移到鏈接文字彈出一個提示層的方法

    這篇文章主要介紹了js實現鼠標移到鏈接文字彈出一個提示層的方法,涉及javascript鼠標事件與css樣式的相關技巧,需要的朋友可以參考下
    2015-05-05
  • JavaScript 動態(tài)添加表格行 使用模板、標記

    JavaScript 動態(tài)添加表格行 使用模板、標記

    在客戶端使用JavaScript動態(tài)添加表格行,先到網上找了相關的資料,發(fā)現有現成做好的組件,發(fā)現它只能夠滿足比較簡單的要求。
    2009-10-10
  • uniapp實現下拉刷新的幾種方式小結

    uniapp實現下拉刷新的幾種方式小結

    原生的uniapp的下拉刷新是一個普通的加載框,樣式真的很單一,下面這篇文章主要總結介紹了uniapp實現下拉刷新的幾種方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • js實現tab選項卡切換功能

    js實現tab選項卡切換功能

    本文主要分享了javascript實現tab選項卡切換功能的示例代碼。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • 必備的JS調試技巧匯總

    必備的JS調試技巧匯總

    試想一下:出現了某個bug,有人用幾分鐘就搞定了,有人用了半天或者一天都找不到原因所在。你愿意當前者還是后者呢?想當前者的就請好好看完本篇文章吧。文中涉及較多Gif演示動畫請注意。
    2016-07-07
  • 使用Threejs加載外部glb文件

    使用Threejs加載外部glb文件

    這篇文章主要介紹了使用Threejs加載外部glb文件方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • JS實現移動端按首字母檢索城市列表附源碼下載

    JS實現移動端按首字母檢索城市列表附源碼下載

    我們常見的手機通訊錄或微信通訊錄,聯系人信息是按字母順序排列的列表,通過點擊右側的字母,會迅速定位檢索到首字母對應的聯系人。下面通過本文給大家分享JS實現移動端按首字母檢索城市列表功能,需要的的朋友參考下吧
    2017-07-07
  • 微信小程序動態(tài)添加和刪除組件的現實

    微信小程序動態(tài)添加和刪除組件的現實

    這篇文章主要介紹了微信小程序動態(tài)添加和刪除組件的現實,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02

最新評論

兴和县| 来安县| 上高县| 建水县| 磴口县| 纳雍县| 庆安县| 通州市| 江永县| 邢台市| 如东县| 额尔古纳市| 宣武区| 湘乡市| 合山市| 沙洋县| 合水县| 滦南县| 通渭县| 绍兴县| 莱芜市| 林西县| 保靖县| 昆山市| 西昌市| 湟中县| 武鸣县| 拉萨市| 马边| 松溪县| 黎城县| 都昌县| 工布江达县| 红河县| 新闻| 马关县| 台北市| 鹤岗市| 那坡县| 汝州市| 墨玉县|