webpack学习和使用二(常用配置)
webpack学习和使用二(常用配置)
接着上一篇“webpack学习和使用一(安装使用和简单demo)”我们继续设置一些webpack的常用配置。
附本实例 GitHub 地址,注意,由于node_modules文件太多,所以没有上传到GitHub,下载后执行
npm i来自动安装依赖即可。
一、自动打包和刷新
1、简单化指令
现在我们执行
npx webpack后是不是有一串黄色的警告提示?
WARNING in configuration The 'mode' option has not been set, webpack will fallback to 'production' for this value......
那是因为webpack默认有开发和生产2个模式,2者根据webpack.config.js的配置来执行不同的打包方案,所以我们需要指定模式,现在执行
npx webpack --mode development就ok了。
但是,每次打这么一串代码是不是很麻烦?方向,有简单方法。我们现在在 package.json 的script属性增加代码如下:
"scripts": { "dev":"npx webpack --mode development", "build":"npx webpack --mode production" },
现在执行
npm run dev就可以了,相当于执行
npx webpack --mode development
你可以分别执行
npm run dev和
npm run bulid,然后查看boundle.js的大小,你会发现有明显变化。
2、自动打包(watch)
我们每次修改后都要执行
npm run dev来打包,是不是很麻烦?其实可以开启 “观察模式(watch)”,就可以自动打包了,在 package.json 的 scripts 增加代码如下:
"scripts": { "dev-watch":"npx webpack --watch --mode development", "build-watch":"npx webpack --watch --mode production", "dev":"npx webpack --mode development", "build":"npx webpack --mode production" },
然后执行
npx run dev-watch,现在我们每次修改文件就会自动打包了。退出观察模式可以按
ctrl+c,注意:我们如果修改并保存配置文件后,需要退出观察模式,再执行才生效。
3、自动刷新页面(webpack-dev-server)
每次修改页面后需手动刷新才能看到最新效果,是不是很麻烦?自动打包解决了,现在解决自动刷新,需要安装本地服务器 webpack-dev-server:
npm i -d webpack-dev-server
webpack.config.js配置本地服务器,增加属性 devServer:
devServer: { contentBase: './dist' },
package.json的scripts属性修改为:
"scripts": { "dev-watch": "npx webpack --watch --mode development", "build-watch": "npx webpack --watch --mode production", "dev": "npx webpack --mode development", "build": "npx webpack --mode production", "server":"npx webpack-dev-server --open" },
然后执行
npm run server就能自动打开一个 http://localhost:8080/ 网址,我们变更文件后,就能自动打包,并自动刷新了,是的,webpack 的观察模式也自动开启了,十分方便。注意:我们如果修改并保存配置文件后,需要退出观察模式,再执行才生效,按
ctrl+c退出。
二、loader 和 plugins
webpack默认只能处理js文件,如果要处理css、图片、sass等文件则要安装并配置对应的loader 和 plugins。
1、处理css文件
- 1.1 安装 css 和 style 的依赖 style-loader 和 css-loader
npm i -d style-loader css-loader
- 1.2 webpack.config.js配置css的 loader,增加属性module如下:
module: { rules: [ { test: /\.css$/, use: ['style-loader', 'css-loader'] } ] }
- 1.3 新增src/index.css文件,代码如下
h1{color:red}
- 1.4 修改index.js文件,头部导入index.css文件
import "./index.css"; var ele = document.createElement('h1'); ele.innerHTML = "Hello 大话主席!"; document.body.appendChild(ele);
再次运行
npm run server看看效果,现在我们修改index.css后保存就能看到最新变化了:
2、抽离css文件
我们看到上面最终生成的css代码是用 style形式插入到html里面的,但更多情况我们是使用外链接形式,那么我们需要安装插件(plugin)
- 2.1 安装插件(mini-css-extract-plugin)
npm i -d mini-css-extract-plugin
- 2.2 webpack.config.js配置插件,代码如下:
const MiniCssExtractPlugin = require('mini-css-extract-plugin'); module.exports = { entry: __dirname + "/src/index.js",//唯一入口文件 output: { path: __dirname + "/dist",//打包后的文件存放的地方 filename: "bundle.js"//打包后输出文件的文件名 }, devServer: { //开发模式下的本地服务器 contentBase: './dist' }, module: { rules: [ { test: /\.css$/, use: [ MiniCssExtractPlugin.loader, 'css-loader' ] } ] }, plugins: [ new MiniCssExtractPlugin({ filename: 'index.css' // 打包到dist/index.css }) ] }
- 2.3 index.html增加css文件的引用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>webpack test</title> <link rel="stylesheet" href="index.css"> </head> <body> <script src="bundle.js"></script> </body> </html>
现在我们再开启server服务就能看到效果了。
3、处理Sass文件
-
3.1 安装sass依赖,sass-loader依赖node-sass,所以要装2个
npm i -d node-sass
npm i -d sass-loader
-
3.2 webpack.config.js配置sass,在’css-loader’后增加’sass-loader’代码如下:
module: { rules: [ { test: /\.(css|scss)$/, use: [ MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader' ] }, ] },
- 3.3 新增src/index.scss文件,代码如下:
$fontSize: 50px; h1{ color:blue; font-size:$fontSize; }
- 3.4 index.js导入index.scss,并去掉index.css的导入
import "./index.scss"; var ele = document.createElement('h1'); ele.innerHTML = "Hello 大话主席!"; document.body.appendChild(ele);
现在我们再开启server服务就能看到效果了。
4、创建 Source Map
我们开发环境下,还是需要调整css的,现在用到了sass,那么还需要source map来查看元素样色具体对应的scss文件代码位置,现在开启source map:
- 4.1 webpack.config.js配置sourceMap
新增 2个属性mode:'development', devtool:'source-map',
同时修改 css-loader和sass-loader,开启sourceMap,具体代码如下:
const MiniCssExtractPlugin = require('mini-css-extract-plugin'); module.exports = { mode:'development', devtool:'source-map', //devtool模式有很多,自行百度 entry: __dirname + "/src/index.js",//唯一入口文件 output: { path: __dirname + "/dist",//打包后的文件存放的地方 filename: "bundle.js"//打包后输出文件的文件名 }, devServer: { //开发模式下的本地服务器 contentBase: './dist' }, module: { rules: [ { test: /\.(css|scss)$/, use: [ MiniCssExtractPlugin.loader, { loader:'css-loader', options: { sourceMap: true } }, { loader:'sass-loader', options: { sourceMap: true } } ] }, ] }, plugins: [ new MiniCssExtractPlugin({ filename: 'index.css' // 打包到dist/index.css }) ] }
现在我们审查元素就能看到元素对应的scss代码了
5、压缩css文件
- 5.1 安装optimize-css-assets-webpack-plugin插件
npm i -d optimize-css-assets-webpack-plugin
- 5.2 webpack.config.js配置optimize-css-assets-webpack-plugin插件
顶部增加模块依赖const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
再增加属性optimization: { minimizer: [new OptimizeCSSAssetsPlugin({})] }
注意:需生产模式才能生效,即执行npm run build
才能看到压缩后文件效果
6、压缩js文件
- 6.1 安装uglifyjs-webpack-plugin插件
npm i -d uglifyjs-webpack-plugin
- 6.2 webpack.config.js配置uglifyjs-webpack-plugin插件
顶部增加模块依赖const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
再修改optimization属性如下:
optimization: { minimizer: [ new UglifyJsPlugin({ cache: true, parallel: true, sourceMap: true //是否需要sourceMap }), new OptimizeCSSAssetsPlugin({}) ] }
注意:需生产模式才能生效,即执行
npm run build才能看到压缩后文件效果
7、处理图片和字体图标
如果我们在html插入图片,你们会提示错误,因为还要加载文件的loader:
- 7.1 安装file-loader插件
npm i -d file-loader
- 7.2 webpack.config.js配置file-loader,use属性增加代码如下:
{ test: /\.(png|svg|jpg|gif)$/, use: [ 'file-loader' ] }, { test: /\.(woff|woff2|eot|ttf|otf)$/, use: [ 'file-loader' ] }
- 7.3 index.js使用代码插入img
import "./index.scss"; //插入元素 var ele = document.createElement('h1'); ele.innerHTML = "Hello 大话主席!"; document.body.appendChild(ele); //插入图片 var img = document.createElement('img'); img.src = "https://img.t.sinajs.cn/t6/style/images/global_nav/WB_logo.png"; document.body.appendChild(img);
常用的配置已做好,可以此基础来进行开发了,下一篇将介绍“进阶使用”。
附本实例 GitHub 地址,注意,由于node_modules文件太多,所以没有上传到GitHub,下载后执行
npm i来自动安装依赖即可。
- JAVA学习:JDBC连接DB2数据库(2):使用配置文件
- Spring学习-webcontex的自动配置和事件传播机制及使用
- Zend Studio的一些常用配置和使用帮助手册
- C++/GDI+ 学习笔记(一)——安装、配置&使用
- MYSQL使用简述-连接MYSQL、修改密码、增加用户等方面来学习一些MYSQL的常用命令
- 实例学习SSIS(三)--使用包配置
- maven 使用学习01:在windows 7下安装和配置maven
- 不常用的系统配置使用工具(msconfig)
- lighttpd学习–使用mod_secdownload模块防盗链及fastcgi模式配置 ZT
- [EntLib]微软企业库5.0 学习之路——第八步、使用Configuration Setting模块等多种方式分类管理企业库配置信息
- snmp学习笔记之一——配置使用trap
- Spring学习2——DI的配置使用
- ZendFramework学习第三章(核心组件—使用配置数据之从ini配置文件中读取数据)
- MyBatis学习总结一 —— MyBatis的使用步骤及配置
- 【JavaWeb_struts2学习杂记】struts2的使用配置
- 华为3COM交换机常用配置学习
- 2009-04-09技术学习:wicket常用控件使用方法
- WebLogic Portal学习系列之二:在WebLogic中配置和使用第三方LDAP Server
- NHibernate学习总结:(一)NHibernate的使用和配置
- Spring学习-helloworld使用xml配置