webpack 配置詳解

最近在學習webpack,邊學邊練習,下面是對一些應用到的屬性、插件記錄分享出來,也方便以后查找與復習,過程中碰到了一些坑,在注釋中有說明:

const path = require('path')
const webpack = require("webpack")const ExtractTextPlugin = require("extract-text-webpack-plugin");
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');function parseUrl(dir) {let mark = '\\'.indexOf(dir) !== -1 ? '\\' : '\/';return dir.split(mark).slice(0, -1).join(mark);
}
/*** 說明* * 1、可以通過import(\/* webpackChunkName: "lodash_file" *\/ 'lodash').then()這種方式動態添加Chunk,*      打包以后會獨立成一個文件,注釋部分結合output- chunkFilename 命名打包后的文件名* 2、chunk名稱,可以通過entry進行定義,也有一些默認的chunk包*/
module.exports = {entry: {  // 命名chunk,后面可以通過屬性名調用到app: './app/index.js',check: './src/check.js',repeat: './src/repeat.js',vender: ['colors','lodash']},};

output

output: {// 文件用hash打包的時候([name].[chunkhash].js),需要關閉熱替換,生產環境是不需要熱替換的// filename: '[name].bundle.js',filename: '[name].[chunkhash].js',path: path.resolve(parseUrl(__dirname), 'dist'),publicPath: '/',  // webpack-dev-middleware插件用到的公共路徑,在server.js文件中會用到chunkFilename: '[name].bundle.js',  // 可以控制動態加載文件名稱
},

devtool

/*** devtool * * 追蹤錯誤和警告,打包以后,使用打包文件也可以追蹤到哪個文件出錯,可以有多個選項,* 參見:https://segmentfault.com/a/1190000004280859 或 https://doc.webpack-china.org/configuration/devtool (官網)* * 開發環境推薦使用 cheap-module-eval-source-map* 理由:* 1、不生成列信息,可以大幅提高 souremap 生成的效率,如果需要列信息,有些瀏覽器也可以自動生成列信息* 2、使用 eval 方式可大幅提高持續構建效率,參見 https://doc.webpack-china.org/configuration/devtool 效率對照表* * 生產環境使用 source-map*/
devtool: 'cheap-module-eval-source-map',

watch

// 監聽項目是否有改動,如果有改動直接影響修改
watch: true,
watchOptions: {// 重新構建一次的延遲時間,在這段時間內有其他變動,會收集起來一起構建aggregateTimeout: 300,poll: 1000,  // 每秒檢查一次變動ignored: /node_modules/  // 忽略node_modules文件夾中的文件變動,提升性能
},

devserver

//  構建一個web服務器
devServer: {contentBase: '../dist',  // 指定服務響應目錄hot: true,  // 啟用熱替換模塊 需要在入口文件中進行配置監聽,詳細參考文檔https://doc.webpack-china.org/guides/hot-module-replacement/
},

module

module: {// 解析文件時匹配相對應的loaderrules: [{test: /\.css$/,use: ["style-loader", "css-loader"],use: ExtractTextPlugin.extract({  // 樣式獨立打包use: 'css-loader'})},{test: /\.(png|svg|jpg|gif)$/,use: ['file-loader']}]
},

plugins

plugins: [// 分離css依賴,生成獨立樣式包,放入參數文件中(沒有會自動生成)new ExtractTextPlugin('styles.css'),// 生成html模板,調用了webpack生成的所有包new HtmlWebpackPlugin({title: 'Output Management',filename: 'index.html',// chunksSortMode: 'none',  // 模塊排列順序// chunks: ['app'],  // 渲染模板,輸入入口定義的模板名稱excludeChunks: ['check'], // 排除的渲染模板,以輸入入口定義的模板名稱為準template: 'index.html'  // 模板路徑,在現有模板的基礎上將打包生成的chucks添加上去}),// 先清除文件夾后生成,避免不必要的文件存在,根目錄下的不能清除new CleanWebpackPlugin(['../dist']),// prints more readable module names in the browser console on HMR updatesnew webpack.NamedModulesPlugin(),/*** 熱替換* * 需要在devServer屬性配置 hot:true 并且創建組件 啟動熱替換* 通過 module.hot 屬性,用來接收監聽接口 放到入口文件中* 使用熱替換可以實現局部刷新,節省開發時間* 如果沒有引入熱替換,修改后就會全部刷新,影響響應速度* HMR 修改樣式表時,需要在hot下引入接口,* 注意:使用熱替換監聽樣式修改時,不能啟動樣式表獨立打包模式,如果啟動瀏覽器就不能響應到樣式的修改* API鏈接:https://doc.webpack-china.org/api/hot-module-replacement*/new webpack.HotModuleReplacementPlugin(),// 代碼壓縮,可以配置source map模式// new UglifyJSPlugin({//     // 使用source map模式(devtool屬性必須設置為devtool: 'source-map')//     // 作用:在生產環境中也可以很方便的調試代碼,類似于devtool: 'inline-source-map'模式//     sourceMap: true// }),new webpack.DefinePlugin({// 定義環境變量,可以在打包入口文件中獲取到,相應環境變量'process.env': {'NODE_ENV': JSON.stringify('production')}}),// 將公共的依賴模塊提取到已有的入口 chunk 中 // 可以創建多個// 可以提取自帶 chunk 獨立打包,比如:boilerplate 、 manifest ....new webpack.optimize.CommonsChunkPlugin({name: 'common', // chunk 的名稱filename: 'common_file.js',  // 輸出 chunk 文件名/*** 公共 chunk 之前所需要包含的最少數量的 chunks(也就是有幾個chunk依賴)* * 1、可選擇 number|Infinity(馬上生成 公共chunk,但里面沒有模塊)|function(module, count) -> boolean,* 2、可以調用函數 返回true的文件打包成獨立文件,false 不會獨立成包* * @param module 模塊信息* @param count 調用數量*/minChunks: function (module, count) {// 禁止打包樣式相關文件(有組件針對樣式文件打包)if (module.resource && (/^.*\.(css|scss)$/).test(module.resource)) {return false;}// node_modules文件夾中的文件獨立打包return module.context && module.context.indexOf("node_modules") !== -1;}}),// 可以根據 entry 或name名稱進行分離打包,// 如果和 chunk = 'common' 共用,會報錯new webpack.optimize.CommonsChunkPlugin({name: "vender",minChunks: Infinity}),// 避免hash發生變化// new webpack.HashedModuleIdsPlugin(),
]

如果有什么不對的地方,歡迎指正。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279450.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279450.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279450.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

連續對焦 auto對焦_如何在Windows 10上使用對焦輔助(請勿打擾模式)

連續對焦 auto對焦Windows 10’s “Focus Assist” feature is a “Do Not Disturb” mode that hides notifications. Windows automatically activates it when you’re playing PC games or mirroring your display—and you can have Windows automatically activate it on…

小米品牌

對于現階段的小米公司來說,他們的策略是行走在鋼絲上的。為什么這么說呢?原因是營銷策略的優勢和劣勢都很容易被人翻轉。換句話來說就是優勢的穩定性不夠,劣勢的方面又很容易崩盤,這兩個方向的絲毫失誤都會帶給小米公司嚴重的打擊…

wepy學習筆記之環境搭建

寫了近兩年小程序了,越來越發現原生小程序有太多雞肋的地方。所以今天準備嘗試一下wepy,正好最近手上有個外包,可以拿來練手。如果可以的話,或許會出一系列wepy相關的文章(偏實戰),歡迎大佬們指…

山東青島市南區:創建物聯網 信息化管理涉案財物

近日,山東省青島市市南區檢察院自主設計研發“物聯網”涉案財物管理系統,使涉案財物管理工作步入了信息化管理模式。 涉案財物管理工作是案件辦理過程中一個相當重要的環節,而以往主要靠人工進行涉案財物管理,工作繁瑣,業務量大,存在查找困難、堆放混亂等問題。庫存現狀不能及時…

spotify能免費下歌嗎_Spotify免費版與高級版:值得升級嗎?

spotify能免費下歌嗎Spotify offers two tiers: a free, ad-supported plan and a $9.99 per month Premium plan. But what are the differences between the two and is it worth upgrading? Let’s find out. Spotify提供兩個等級:免費的廣告支持計劃和每月9.99…

BZOJ4012 [HNOI2015]開店

BZOJ4012 [HNOI2015]開店 這道題因為太多人拿這個題卡$BZOJ$,于是成了權限題。。。 本蒟蒻表示沒錢氪金。。。 無奈,拿出了洛谷:P3241 [HNOI2015]開店 還有$LOJ$:#2116. 「HNOI2015」開店 這里附上洛谷的題面: 題目描述…

ElasticSearch實戰-入門

1.概述 今天接著《ElasticSearch實戰-日志監控平臺》一文來給大家分享后續的學習,在《ElasticSearch實戰-日志監控平臺》中給大家介紹一個日志監控平臺的架構方案,接下來給大家分享如何去搭建部署這樣一個平臺,給大家做…

如何解決90%的報表設計難題?300張報表模板任君挑選

下載ActiveReport最新試用版 大數據時代,數據價值愈發彰顯,數據分析正在成為影響業務決策的關鍵因素。其中,數據分析的結果以報表的形式呈現給用戶,究竟什么樣的報表設計才能真正讓用戶滿意,如何保證用戶在復雜的數據…

macos 版本_如何檢查您使用的macOS版本

macos 版本Apple releases new versions of the macOS operating system about once per year. Here’s how to check which release of the macOS operating system is installed on your MacBook, iMac, Mac Mini, or Mac Pro. 蘋果大約每年發布一次新版本的macOS操作系統。 …

luogu 1484\1792 種樹 奇怪的貪心可反悔

1484 種樹 此版本是線性的&#xff0c;那么根據鏈表維護即可&#xff1b; 構建新點&#xff0c;點的左右分別是原整個區間的前驅及后繼&#xff0c;再正常維護即可 注意兩個版本的維護有所不同 第二個版本的維護直接將左右兩點刪除 1792 種樹2 此版本是環 1484 #include<bi…

第十四周作業

2019春第二次課程設計實驗報告 一.實驗項目 貪吃蛇游戲 二.實驗功能描述&#xff1a; 存儲數據&#xff0c;實現wasd控制蛇方向&#xff0c;吃到食物就增加長度&#xff0c;最后按長度算分數&#xff0c;撞到障礙物則死亡&#xff0c;計算積分 三.項目模板結構介紹&#xff1a;…

java語言不用擔心內存嗎_不用擔心智能手機的電池,只需使用它

java語言不用擔心內存嗎When you’re trying to get the most life out of your device, it’s easy to overthink batteries. Don’t. Plug in your devices when possible, carry a battery pack with you, and get on with your life. 當您試圖充分利用設備的使用壽命時&…

asp.net core結合NLog搭建ELK實時日志分析平臺

0、整體架構 整體架構目錄&#xff1a;ASP.NET Core分布式項目實戰-目錄 一、介紹ELK 1、說明&#xff08;此篇ELK采用rpm的方式安裝在服務器上&#xff09;-牛刀小試 承接上一篇文章的內容準備部署ELK來展示asp.net core 的數據。目前此篇文章只用到單臺服務器&#xff0c;等下…

Rhel7 設置目錄權限,acl權限

Rhel7 設置目錄權限&#xff0c;acl權限 改變用戶和組的所屬 Getfacl 取得 Setfacl設置 [rootdesktop0 tmp]# setfacl -m u:natasha:rw fstab [rootdesktop0 tmp]# setfacl -m u:harry:- fstab [rootdesktop0 tmp]# setfacl -m o::r fstab [rootdesktop0 tmp]# getfacl fstab #…

IT兄弟連 JavaWeb教程 AJAX定義以及解決的問題

2019獨角獸企業重金招聘Python工程師標準>>> Ajax是"Asynchronous JavaScript And XML"的縮寫(即&#xff1a;異步的JavaScript和XML)&#xff0c;是一種實現無頁面刷新獲取服務器數據的混合技術,Ajax這個概念的最早提出者是Jesse James Garrett。我們知道…

echo和@echo_如何在Echo Show和Echo Spot上切換到24小時時鐘

echo和echoIf you prefer the 24-hour clock format instead of the usual 12-hour format, Amazon recently (and quietly) added the ability to switch between the two on the Echo Show and Echo Spot. 如果您希望使用24小時制而不是通常的12小時制&#xff0c;那么Amazon…

springMVC--XML解析

一 springMVC 入口 web.xml; DispatcherServlet二 初始化過程 1.尋找init(); 查看DispatcherServlet時候時&#xff0c;繼承自servlet&#xff0c;肯定有初始化方法,DispatcherServlet繼承自FrameworkServlet FrameworkServlet繼承自HttpServletBean HttpServletBean繼承自Http…

Vim 4 常用插件

Vim 系列教程目錄: Vim 1 基本使用Vim 2 高級用法Vim 3 vimrcVim 4 常用插件Vim 5 其他編輯器的 Vim 插件Vim 插件網站 Vim 之所以強大, 有個很大的原因就是他有豐富的插件. 插件可以極大地增強 Vim 的功能. 那么去哪里下載插件呢? 插件怎么安裝和管理呢, 聽我慢慢道來. 先說到…

[Windows編程] 通過GetModuleHandleEx 得到函數調用者所在的DLL/EXE 原創陳本峰2009-02

在有些情況下需要得到函數調用者的模塊名字。比如你想限制你的某個函數只能被自己某個特定的DLL調用。 或者比如在異常處理中你想了解是那個DLL/EXE拋出了異常。API函數_ReturnAddress 和GetModuleHandleEx 函數可以幫助我們達到這個目的。以下代碼演示它們的用法&#xff1a;v…

生信入門-愛課程上的華中農業大學

1.生物大分子序列分析 2.主要技術 3.生物信息學的應用 4.應用2 轉載于:https://www.cnblogs.com/BlueBlueSea/p/9610313.html