一、webpack 配置 devServer
-
创建空文件夹,通过
npm init
命令初始化package.json
文件,通过npm install webpack webpack-cli -g
命令全局下载webpack
和webpack-cli
,通过npm install webpack webpack-cli -D
命令本地下载webpack
和webpack-cli
,通过npm i style-loader css-loader -D
命令下载style-loader
和css-loader
,通过npm i html-webpack-plugin -D
命令下载html-webpack-plugin
插件,通过npm install file-loader -D
命令下载file-loader
,通过npm install webpack-dev-server -D
命令下载webpack-dev-server
。 -
创建
src
文件目录,里面创建index.html
和index.js
文件,同时引入其它资源,比如字体图标,代码如下所示:
-
index.js
import './iconfont.css'; function add(x, y) { return x + y; } console.log(add(1, 2)); console.log(add(4, 8));
-
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>webpack</title> </head> <body> <span class="iconfont icon-icon-test"></span> <span class="iconfont icon-icon-test2"></span> <span class="iconfont icon-icon-test3"></span> <span class="iconfont icon-icon-test1"></span> <div>hello webpack</div> </body> </html>
- 创建
webpack.config.js
文件,通过require
引入path
和html-webpack-plugin
。entry
是入口文件,output
是出口文件,filename
是打包输出后的文件名,path
是输出路径。module
是loader
的配置,rules
是详细的loader
配置。第一个规则是匹配以.css
结尾的文件,使用的loader
是style-loader
和css-loader
。第二个规则是打包其他资源(除了html/js/css
资源以外的资源),通过exclude
排除css/js/html
资源,使用的loader
是file-loader
。由于打包后得到的是hash
值,名称很长,所以进行options
配置,将name
的名字设置为[hash:10].[ext]
,取hash
前10
位并且文件原来的扩展名。plugins
里面是一些插件配置,通过new HtmlWebpackPlugin()
,复制里面的文件,并自动引入打包输出的所有资源(JS/CSS
),设置mode
模式为development
开发模式。如果在每一次更改代码以后,都需要重新webpack
打包一遍才能够看到最新的效果,比较麻烦,而webpack-dev-server
可以解决实现自动更新。发服务器devServer
:用来自动化(自动编译,自动打开浏览器,自动刷新浏览器)。特点是只会在内存中编译打包,不会有任何输出。在devServer
中,contentBase
是项目构建后路径,compress
是启动gzip压缩,port
是端口号,open
是自动打开浏览器,代码如下所示:
const { resolve } = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './src/index.js',
output: {
filename: 'built.js',
path: resolve(__dirname, 'build')
},
module: {
rules: [
{
test: /\.css$/,
use: [ 'style-loader', 'css-loader']
},
{
exclude: /\.(css|js|html)$/,
loader: 'file-loader',
options: {
name: '[hash:10].[ext]'
}
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
})
],
mode: 'development',
devServer: {
contentBase: resolve(__dirname, 'build'),
compress: true,
port: 3000,
open: true
}
}
- 在命令行输入
npx webpack-dev-server
命令,项目就会自动打包编译。每次在更改完代码后,自动编译看到最新的显示内容。
二、webpack 配置开发环境
-
创建空文件夹,通过
npm init
命令初始化package.json
文件,通过npm install webpack webpack-cli -g
命令全局下载webpack
和webpack-cli
,通过npm install webpack webpack-cli -D
命令本地下载webpack
和webpack-cli
,通过npm i style-loader css-loader -D
命令下载style-loader
和css-loader
,通过npm i less less-loader -D
命令下载less
和less-loader
,通过npm i html-webpack-plugin -D
命令下载html-webpack-plugin
插件,通过npm i url-loader file-loader -D
命令下载url-loader
和file-loader
,通过npm i html-loader -D
命令下载html-loader
。 -
创建
src
文件夹,在里面创建css
、js
、imgs
和media
文件夹,以及index.html
。css
文件夹中放index.less
和字体图标资源样式,js
文件夹中放index.js
,imgs
文件夹中放图片资源,media
文件夹放字体图标的相关资源,代码如下所示:
-
index.less
#box { width: 200px; height: 200px; background-image: url('../imgs/angular.jpg'); background-repeat: no-repeat; background-size: 100% 100%; }
-
index.js
import '../css/iconfont.css'; import '../css/index.less'; function add(x, y) { return x + y; } console.log(add(1, 2));
-
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>开发环境</title> </head> <body> <h1>开发环境配置</h1> <span class="iconfont icon-icon-test"></span> <span class="iconfont icon-icon-test2"></span> <span class="iconfont icon-icon-test3"></span> <span class="iconfont icon-icon-test1"></span> <div id="box"></div> <img src="./imgs/vue.jpg" alt="vue"> <img src="./imgs/react.png" alt="react"> </body> </html>
- 创建
webpack.config.js
文件,通过require
引入path
和html-webpack-plugin
,entry
是入口文件,output
是出口文件,filename
是打包输出后的文件名,path
是输出路径。module
是loader
的配置,rules
是详细的loader
配置。第一个规则是处理less
资源,匹配以.less
结尾的文件,使用的loader
是style-loader
、css-loader
和less-loader
。第二个规则是处理css
资源, 匹配以.css
结尾的文件,使用的loader
是style-loader
和css-loader
。第三个规则是处理图片资源,匹配以jpg
、png
和gif
结尾的文件图片资源,使用的loader
是url-loader
,进行options
配置,limit
是限制图片的大小小于8kb
,就会被base64
处理,给图片做优化,name
给图片做重命名,取hash
值的前10
位,取文件的原来扩展名,关闭es6
模块化,输出路径为imgs
。第四个规则是 处理html
中的img
资源,匹配以.html
结尾的文件,使用的loader
是html-loader
。由于处理图片资源采用的是ES6 module
解析,而html
文件中的img
资源使用commonJS
解析,会造成冲突,需要关闭ES6 module
。第五个规则是处理其它资源,使用exclude
不包括上面的所有资源,html|css|js|less|jpg|png|gif
,使用file-loader
,通过options
配置name
的值为取hash
值的前10
位,取文件的原来扩展名,通过outputPath
设置输出路径为media
。plugins
里面是一些插件配置,通过new HtmlWebpackPlugin()
,复制里面的文件,并自动引入打包输出的所有资源(JS/CSS
),设置mode
模式为development
开发模式。在devServer
中,contentBase
是项目构建后路径,compress
是启动gzip
压缩,port
是端口号,open
是自动打开浏览器,代码如下所示:
const { resolve } = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
entry: './src/js/index.js',
output: {
filename: 'js/built.js',
path: resolve(__dirname, 'build')
},
module: {
rules: [
{
test: /\.less$/,
use: ['style-loader', 'css-loader', 'less-loader']
},
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
},
{
test: /\.(jpg|png|gif)$/,
loader: 'url-loader',
options: {
limit: 8 * 1024,
name: '[hash:10].[ext]',
esModule: false,
outputPath: 'imgs'
}
},
{
test: /\.html$/,
loader: 'html-loader'
},
{
exclude: /\.(html|css|js|less|jpg|png|gif)$/,
loader: 'file-loader',
options: {
name: '[hash:10].[ext]',
outputPath: 'media'
}
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
})
],
mode: 'development',
devServer: {
contentBase: resolve(__dirname, 'build'),
compress: true,
port: 3000,
open: true
}
}
- 在命令行输入
npx webpack-dev-server
命令,项目就会自动打包编译。每次在更改完代码后,自动编译看到最新的显示内容。在build
打包文件中,也可以看到打包后的css
、js
、imgs
和media
文件夹,以及index.html
。