webpack
安装
安装之前进行项目初始化生成 package.json 文件
npm init -y
npm init
接下来安装 webpack 和 webpack-cli
npm i webpack webpack-cli --save
配置命令行
在package.json文件的scripts字段中配置启动命令
"scripts":{
"test": "echo \"Error: no test specified\" && exit 1",
"dev":"webpack --mode development",
"build":"webpack --mode production",
}
创建入口文件
webpack 默认的入口文件是 src 目录下的 index.js ; 需要在项目的根目录下创建src文件夹,在里边创建 index.js 文件作为入口文件
执行命令
命令执行成功后。会自动在项目的根目录下生成一个dist 文件,该文件就是打包后的产物; dist 文件不是必须的,可以随时删除的
- 开发环境
npm run dev
- 生产环境
npm run build
webpack 支持的模块化
webpack 支持 CommonJs 模块化 和 es6的模块化
- CommonJs
module.exports = {}
const res = requrie('模块url')
- es6
export default 模块名
export 模块对象
import ... from '模块url'
webpack的配置文件
如果要对webpack 进行配置,需要在项目根目录下创建配置文件 webpack.config.js ; 该文件是一个模块
module.exports = {
...
}
webpack的入口和出口
webpack的入口 entry 和 出口 output :
- 单一入口和出口
const path = require('path')
module.exports = {
entry:'index.js',
output:{
path:path.resolve(__dirname, "dist"),
filename:'[name].js'
}
}
- 多入口文件和单一出口
const path = require('path')
module.exports = {
entry:['index.js', 'main.js',...],
output:{
path:path.resolve(__dirname, "dist"),
filename:'[name].js'
}
}
- 多入口配置
const path = require('path')
module.exports = {
entry:{
index:'index.js',
main:'main.js'
}
output:{
path:path.resolve(__dirname, "dist"),
filename:'[name].js'
}
}
webpack的loader 和 plugin
webpack 处理 模板文件
webpack 处理html 文件: 需要借助于 html-webpack-plugin 插件, 该插件会自动帮我们管理引入js文件
- 安装插件
npm i html-webpack-plugin --save
- 配置插件
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
entry:'index.js',
output:{
path:path.resolve(__dirname, 'dist'),
filename:'index.js'
},
plugins:[
new HtmlWebpackPlugin({
template:'index.html',
filename:'index.html'
})
]
}
管理输出文件夹dist
需要管理输出的文件dist, 可以通过配置项或者是插件实现自动管理dist文件夹
- 配置项
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
entry:'index.js',
output:{
path:path.resolve(__dirname, 'dist'),
filename:'index.js',
clean:true
},
plugins:[
new HtmlWebpackPlugin({
template:'index.html',
filename:'index.html'
})
]
}
- 通过插件
需要安装 clean-webpack-plugin 插件
npm i clean-webpack-plugin --save
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { CleabWebpackPlugin } = require('clean-webpack-plugin')
module.exports = {
entry:'index.js',
output:{
path:path.resolve(__dirname, 'dist'),
filename:'index.js',
},
plugins:[
new HtmlWebpackPlugin({
template:'index.html',
filename:'index.html'
}),
new CleabWebpackPlugin()
]
}
webpack 处理 css 文件
webpack 处理css / sass 文件,需要依赖loader; 需要安装 css-loader 和 style-loader , sass-loader 和 sass
loader 的作用:
- css-loader : 处理解析css文件
- style-loader : 把处理解析后的css文件 从js文件中提取出来,以内部样式的方式(style标签)插入到html页面中,
- sass :解析处理 sass文件
- sass-loader : 编译转码为css文件
生成内部的css样式
- 安装loader
npm i css-loader style-loader sass-loader sass --save
- 配置loader
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
entry:'index.js',
output:{
path:path.resolve(__dirname, 'dist'),
filename:'index.js'
},
module:{
rules:[
{
test:/\.css$/i,
use:['style-loader', 'css-loader']
},
{
test:/\.(scss|sass)$/i,
use:['style-loader', 'css-loader', 'sass-loader']
}
]
},
plugins:[
new HtmlWebpackPlugin({
template:'index.html',
filename:'index.html'
})
]
}
打包生成独立的css文件
打包生成独立的css文件,需要借助于 mini-css-extract-plugin 插件,
- 安装
npm install --save-dev mini-css-extract-plugin
- 配置插件
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
entry:'index.js',
output:{
path:path.resolve(__dirname, 'dist'),
filename:'index.js'
},
module:{
rules:[
{
test:/\.css$/i,
use:[MiniCssExtractPlugin.loader 'css-loader']
},
{
test:/\.(scss|sass)$/i,
use:[MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader']
}
]
},
plugins:[
new HtmlWebpackPlugin({
template:'index.html',
filename:'index.html'
}),
new MiniCssExtractPlugin()
]
}
webpack处理图片资源
webpack 处理图片资源,需要使用 file-loader 和 url-loader
- 安装
npm i file-loader url-loader --save
- 配置loader
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
entry:'index.js',
output:{
path:path.resolve(__dirname, 'dist'),
filename:'index.js'
},
module:{
rules:[
{
test:/\.css$/i,
use:[MiniCssExtractPlugin.loader 'css-loader']
},
{
test:/\.(scss|sass)/i,
use:[MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader']
},
{
test:/\.(jpg|jpeg|png|gif|webp)$/i,
use:[
{
loader:'url-loader',
options:{
limit:8192,
name:'image/[name].[ext]'
}
}
]
}
]
},
plugins:[
new HtmlWebpackPlugin({
template:'index.html',
filename:'index.html'
}),
new MiniCssExtractPlugin()
]
}
webpack的热更新
webpack的 webpack-dev-server 插件可以实现热更新并开启服务
- 安装
npm i webpack-dev-server --save
- 配置 devServer
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
entry:'index.js',
output:{
path:path.resolve(__dirname, 'dist'),
filename:'index.js'
},
devServer:{
port:9001
},
module:{
rules:[
{
test:/\.css$/i,
use:[MiniCssExtractPlugin.loader 'css-loader']
},
{
test:/\.(scss|sass)/i,
use:[MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader']
},
{
test:/\.(jpg|jpeg|png|gif|webp)$/i,
use:[
{
loader:'url-loader',
options:{
limit:8192,
name:'image/[name].[ext]'
}
}
]
}
]
},
plugins:[
new HtmlWebpackPlugin({
template:'index.html',
filename:'index.html'
}),
new MiniCssExtractPlugin()
]
}
- 配置启动命令
在 package.json 文件中配置启动命令 , 执行命令 npm run server
"scripts":{
"test": "echo \"Error: no test specified\" && exit 1",
"dev":"webpack --mode development",
"build":"webpack --mode production",
"server":"webpack serve --open"
}
webpack的环境配置
环境分为开发环境,生产环境, 测试环境等, 因此需要配置环境
需要借助于插件 webpack-merge 帮我们合并处理配置文件:
npm i webpack-merge --save
创建三个webpack的配置文件: webpack.basic.js webpack.dev.js webpack.pro.js
-
webpack.basic.js -
webpack.dev.js
const { merge } = require('webpack-merge');
const basic = require('webpack.basic.js');
module.exports = merge(basic, {...})
const { merge } = require('webpack-merge');
const basic = require('webpack.basic.js');
module.exports = merge(basic, {...})
webpack
安装
安装之前进行项目初始化生成 package.json 文件
npm init -y
npm init
接下来安装 webpack 和 webpack-cli
npm i webpack webpack-cli --save
配置命令行
在package.json文件的scripts字段中配置启动命令
"scripts":{
"test": "echo \"Error: no test specified\" && exit 1",
"dev":"webpack --mode development",
"build":"webpack --mode production",
}
创建入口文件
webpack 默认的入口文件是 src 目录下的 index.js ; 需要在项目的根目录下创建src文件夹,在里边创建 index.js 文件作为入口文件
执行命令
命令执行成功后。会自动在项目的根目录下生成一个dist 文件,该文件就是打包后的产物; dist 文件不是必须的,可以随时删除的
- 开发环境
npm run dev
- 生产环境
npm run build
webpack 支持的模块化
webpack 支持 CommonJs 模块化 和 es6的模块化
- CommonJs
module.exports = {}
const res = requrie('模块url')
- es6
export default 模块名
export 模块对象
import ... from '模块url'
webpack的配置文件
如果要对webpack 进行配置,需要在项目根目录下创建配置文件 webpack.config.js ; 该文件是一个模块
module.exports = {
...
}
webpack的入口和出口
webpack的入口 entry 和 出口 output :
- 单一入口和出口
const path = require('path')
module.exports = {
entry:'index.js',
output:{
path:path.resolve(__dirname, "dist"),
filename:'[name].js'
}
}
- 多入口文件和单一出口
const path = require('path')
module.exports = {
entry:['index.js', 'main.js',...],
output:{
path:path.resolve(__dirname, "dist"),
filename:'[name].js'
}
}
- 多入口配置
const path = require('path')
module.exports = {
entry:{
index:'index.js',
main:'main.js'
}
output:{
path:path.resolve(__dirname, "dist"),
filename:'[name].js'
}
}
webpack的loader 和 plugin
webpack 处理 模板文件
webpack 处理html 文件: 需要借助于 html-webpack-plugin 插件, 该插件会自动帮我们管理引入js文件
- 安装插件
npm i html-webpack-plugin --save
- 配置插件
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
entry:'index.js',
output:{
path:path.resolve(__dirname, 'dist'),
filename:'index.js'
},
plugins:[
new HtmlWebpackPlugin({
template:'index.html',
filename:'index.html'
})
]
}
管理输出文件夹dist
需要管理输出的文件dist, 可以通过配置项或者是插件实现自动管理dist文件夹
- 配置项
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
entry:'index.js',
output:{
path:path.resolve(__dirname, 'dist'),
filename:'index.js',
clean:true
},
plugins:[
new HtmlWebpackPlugin({
template:'index.html',
filename:'index.html'
})
]
}
- 通过插件
需要安装 clean-webpack-plugin 插件
npm i clean-webpack-plugin --save
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { CleabWebpackPlugin } = require('clean-webpack-plugin')
module.exports = {
entry:'index.js',
output:{
path:path.resolve(__dirname, 'dist'),
filename:'index.js',
},
plugins:[
new HtmlWebpackPlugin({
template:'index.html',
filename:'index.html'
}),
new CleabWebpackPlugin()
]
}
webpack 处理 css 文件
webpack 处理css / sass 文件,需要依赖loader; 需要安装 css-loader 和 style-loader , sass-loader 和 sass
loader 的作用:
- css-loader : 处理解析css文件
- style-loader : 把处理解析后的css文件 从js文件中提取出来,以内部样式的方式(style标签)插入到html页面中,
- sass :解析处理 sass文件
- sass-loader : 编译转码为css文件
———————————————————————————————————————————————————————————————————
生成内部的css样式
- 安装loader
npm i css-loader style-loader sass-loader sass --save
- 配置loader
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
entry:'index.js',
output:{
path:path.resolve(__dirname, 'dist'),
filename:'index.js'
},
module:{
rules:[
{
test:/\.css$/i,
use:['style-loader', 'css-loader']
},
{
test:/\.(scss|sass)$/i,
use:['style-loader', 'css-loader', 'sass-loader']
}
]
},
plugins:[
new HtmlWebpackPlugin({
template:'index.html',
filename:'index.html'
})
]
}
打包生成独立的css文件
打包生成独立的css文件,需要借助于 mini-css-extract-plugin 插件,
- 安装
npm install --save-dev mini-css-extract-plugin
- 配置插件
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
entry:'index.js',
output:{
path:path.resolve(__dirname, 'dist'),
filename:'index.js'
},
module:{
rules:[
{
test:/\.css$/i,
use:[MiniCssExtractPlugin.loader 'css-loader']
},
{
test:/\.(scss|sass)$/i,
use:[MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader']
}
]
},
plugins:[
new HtmlWebpackPlugin({
template:'index.html',
filename:'index.html'
}),
new MiniCssExtractPlugin()
]
}
webpack处理图片资源
webpack 处理图片资源,需要使用 file-loader 和 url-loader
- 安装
npm i file-loader url-loader --save
- 配置loader
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
entry:'index.js',
output:{
path:path.resolve(__dirname, 'dist'),
filename:'index.js'
},
module:{
rules:[
{
test:/\.css$/i,
use:[MiniCssExtractPlugin.loader 'css-loader']
},
{
test:/\.(scss|sass)/i,
use:[MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader']
},
{
test:/\.(jpg|jpeg|png|gif|webp)$/i,
use:[
{
loader:'url-loader',
options:{
limit:8192,
name:'image/[name].[ext]'
}
}
]
}
]
},
plugins:[
new HtmlWebpackPlugin({
template:'index.html',
filename:'index.html'
}),
new MiniCssExtractPlugin()
]
}
webpack的热更新
webpack的 webpack-dev-server 插件可以实现热更新并开启服务
- 安装
npm i webpack-dev-server --save
- 配置 devServer
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
entry:'index.js',
output:{
path:path.resolve(__dirname, 'dist'),
filename:'index.js'
},
devServer:{
port:9001
},
module:{
rules:[
{
test:/\.css$/i,
use:[MiniCssExtractPlugin.loader 'css-loader']
},
{
test:/\.(scss|sass)/i,
use:[MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader']
},
{
test:/\.(jpg|jpeg|png|gif|webp)$/i,
use:[
{
loader:'url-loader',
options:{
limit:8192,
name:'image/[name].[ext]'
}
}
]
}
]
},
plugins:[
new HtmlWebpackPlugin({
template:'index.html',
filename:'index.html'
}),
new MiniCssExtractPlugin()
]
}
- 配置启动命令
在 package.json 文件中配置启动命令 , 执行命令 npm run server
"scripts":{
"test": "echo \"Error: no test specified\" && exit 1",
"dev":"webpack --mode development",
"build":"webpack --mode production",
"server":"webpack serve --open"
}
webpack的环境配置
环境分为开发环境,生产环境, 测试环境等, 因此需要配置环境
需要借助于插件 webpack-merge 帮我们合并处理配置文件:
npm i webpack-merge --save
创建三个webpack的配置文件: webpack.basic.js webpack.dev.js webpack.pro.js
-
webpack.basic.js -
webpack.dev.js
const { merge } = require('webpack-merge');
const basic = require('webpack.basic.js');
module.exports = merge(basic, {...})
const { merge } = require('webpack-merge');
const basic = require('webpack.basic.js');
module.exports = merge(basic, {...})
|