webpack4實戰配置


庫的打包:

          1.讓打包后用戶可以引用

             使用libraryTarget:umd  //umd讓各種方法都能引用,如import ....等

            library:' '  //支持<script>的引用,可以自定義任何變量

           

             增加全局變量后,就可以調用方法了

    2.自己庫里引用了第三方庫,而用戶引用了自己庫,又引用了這個第三方庫,造成重復

           使用externals,打包時,不打包第三方庫,而是要用戶在自己的業務代碼中引用

           

 

            3.上傳到npm網站 ,方便安裝使用

                  修改package.json中的mian的路徑為打包后dist里面js路徑

                  

 

                     然后 npm adduser登錄上,npm publish直接發布到npm倉庫,就可以了,

                     packjson.json里面的name就是庫的名字,但是不能與npm已有庫重復

 

PWA:Progressive Web Application,不一樣的緩存

               頁面加載成功后斷網,再刷新,就不顯示這個網站,PWA的技術就解決了這個問題:斷網后,已加載的模塊還是能夠顯示

                 安裝第三方模塊 workbox-webpack-plugin可以實現

                  npm install workbox-webpack-plugin --save-dev

                  在webpack.prod.js線上配置中使用:

                   

                      

                      當時這只是最基礎的,如果需要這方面業務,還需要查閱相關文檔

 

TypeScript的打包配置

                安裝typescript和ts-loader;

                  npm install typescript ts-loader --save-dev

                  typescript額外需要一個配置項tsconfig.js

                  

              在typescript中,import引用第三方庫,如常見的lodash,會報錯,說lodash不是模塊,這個時候就要安裝@type;

            loadsh是      npm install @type/loader --save

            相關的類庫types支持可以在typesearch上查詢。

            引入方法import _ from 'lodash'

                          import * as _ from 'lodash',

            如果調用第三方庫的方法,會方便檢查出錯誤

 

devServer.proxy:接口請求轉發

                     在webpack的基礎部分,已經學習了devserver的基礎配置,這里要說的是接口代理proxy;

                     簡而言之,就是開發接口和線上接口要一致,減少麻煩;

                     使用方法:開發階段寫真實接口,devServer只是開發時啟用的,在里面做接口代理proxy

        例:axios.get('/api/header.json');  當請求api接口時,轉而請求http://www.xxxx.com/header.json這個接口

                        

                     還有其他參數:當你請求/api/header.json時,會轉發到http://www.xx.com/header.json這個接口,

                      pathRewrite如果是header,json接口,就請求demo.json接口,最終請求的http://www.xx.com/demo.json     

                           

                    如果請求的https:開頭的,secure:false

                         

                      多路徑同時轉發:

                          

                      對根路徑做接口代理 '/':{}是不行的,需設置Index:false或空:

                      

                     有些網址設置了origin的限制,就不能獲取到轉發得到接口:

                      建議所有proxy都設置changeOrigin:true的參數,可以突破這個限制;

                       

                      還可以配置請求頭信息,或者cookie模擬登陸:

                    

 

devServer.historyApiFallback:            

                 建議設置為true就行!!!

 

              因為單頁引用刷新頁面時訪問的資源在服務端找不到,始終是404,設置為true,任意的404頁面都加載首頁index.html

              

                 等價於下面,訪問任意網址,都會展現langing.html的內容,可配置

                    

 

ESLint在webpack的配置:

                安裝npm install eslint  --save-dev

                安裝后初始化配置  npx selint --init,

                結合VScode編輯平的eslint插件檢查就可以了,

                合作時,有些開發人員可能沒有這個插件,安裝 eslint-loader,配置到webpack中也可以發現錯誤,再設置devServer.overlay:true,可以彈出錯誤,方便發現,做到統一

 

webpack性能優化:

                 1.盡可能使用新版本的webpack,node,npm

                 2.使用合理使用loader,讓作用范圍更加精准

                   exclude排除第三方插件loader的轉化;                     

                    

                  include只轉換src文件里面loader;

                   

                 3.合理使用plugins插件,盡可能精簡並確保可靠,比如開發環境和生產環境所需的不同插件,應該分開用

                  4.合理使用resolve

                   extensins省略尾巴,建議只省略js之類的邏輯文件,不要.css .jpg等都省略,因為這個運行時,每次都會查找一下,耗性能;

                   alias別名,文件位置太深,使用別名可以快速調用

                  

                  5.使用DllPlugin插件,通常是大型項目必備:

                     將使用的第三方庫第一次單獨打包到一個文件內,之后的每一次打包直接調用即可;

                     

                    A. 新建一個配置項webpack.dll.js,單獨用來打包第三方模塊,得到一個單獨的js文件

                     

                   B.得到的js文件我們不可能手動引入,麻煩,要在配置中寫好,打包后,讓模板自己引入,在webpack.common.js中引入一個插件 add-asset-html-webpack-plugin:在html中增加靜態資源的引入;

                   npm install add-asset-html-webpack-plugin --save

                   

                  引入插件后,再使用,將dll.js靜態資源自動插入index.html中

                   

                   C.第三方模塊打包一次已實現,接下來就是每次打包使用第三方模塊時,使用已打包好的模塊,不再用node_modules里面的第三方模塊

                   在webpacl.dll.js配置中引用DllPlugin分析打包的第三方庫模塊

                   

                   

                   D.在webpack.common.js中使用插件DllReferencePlugin,根據分析的結構決定是從打包的庫中拿,還是node_modules中拿;

                    

                大型項目中就能提高打包速度。。。。。   

                 6.控制包文件大小,用不到的包要注意;

 

多頁面打包配置:

                就是多配置htmlWebpackPlugin而已;

                入口變成多個     

                 

                輸出成不同的html

                

 

如何編寫一個loader 

                loader是一個函數,下面實現一個簡單的loader;

               這個loader能將world字符轉化為yxy

               source就是引入的js內容

               

               使用時一樣,只是是引用路徑

               

               通過這兩部就實現了一個簡單的loader及使用;使用時,可以傳遞參數

               注意:loader中不能使用箭頭函數,不然this指向不對,獲取不到參數

               

 

               在loader的函數中 this.callback()作用和renturn一樣;不過返回的信息更多;

                  this.callback(錯誤信息,內容,映射日志,其他參數);

               在loader函數中使用異步,必須異步執行完畢后再返回出去,不然會報錯;

                   使用this.async()函數,就可以實現;

                   

 

如何編寫一個Plugin:

              原理:發布訂閱模式

              plugin是一個類;

              下面編寫一個簡單的插件

              

 

 

webpack原理分析:

                 1.入口文件:獲取入口文件,分析入口文件

                  

                  最后調用即可;

 

 

 

 

 

            

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM