webpack是一个前端资源加载/打包工具。他将根据模块的依赖关系进行静态分析,而后将这些模块按照指定的规则生成对应的静态资源。css
npm install webpack-cli-g
webpack 输入文件.js -o 输出文件.js
webpack --mode development 输入文件.js -o 输出文件.js
webpack --progress --colors
webpack --watch
//打包单个文件
const path = require ('path')
module.exports = {
entry:'index.js',//入口文件
output:{
path:path.resolve(__dirname,'dist),
filrname:'output.bundle.js'
},//出口文件
mode:'development'//设置开发模式或生产模式
}
//打包多个文件
module.exports = {
entry:{
about:'./about.js',
home:'./home.js',
}
output:{
path:path.resolve(__dirname,'dist'),
filrname:[name].bundle.js
}
}
复制代码
webpack自己只能处理JavaScript模块,若是须要处理其余类型的文件就须要用到loader;loader是用来预处理源文件的,源文件多是ts、less、sass等等。html
//先安装file-loader和url-loader
npm install file-loader url-loader
//安装成功后配置webpack,在webpack.config.js文件中,建立module对象,配置rules
const path = require ('path')
module.exports = {
entry:'index.js',//入口文件
output:{
path:path.resolve(__dirname,'dist),
filrname:'output.bundle.js'
},//出口文件
mode:'development'//设置开发模式或生产模式
module:{
rules:[
{
test:/\.(png|gif|jpg)$/i,
use:[
{
loader:'url-loader',
options:{
limit:708192
}
}
]
}
]
}
}
//最后运行打包命令
webpack
复制代码
npm install css-loader style-loader
//先建立一个css文件;
body{
background:yellow
}
//建立一个js文件,并引入上面的css文件
require(!style-loader!css-loader!./style.css)
//接下来使用命令进行打包
webpack index.js bundle.js
//咱们也能够根据模型拓展名来自动绑定loader
//引入文件时,正常写
require('./style.css')
//打包时输入时,输入命令
webpack index.js bundle.js --module-bind 'css=!style-loader!css-loader'
复制代码
npm install babel-loader@8.0.0-beta.0 @babel/core @babel/preset-env webpack
复制代码
{ test:/.(js|jsx)$/, exclude:/(node_modules|bower_components)/,//排除匹配这些文件 use:{ loader:'babel-loader', options:{ presets:['@babel/preset-env'], plugins: [require('@babel/plugin-transform-object-rest-spread')]//设置规则,若是是react则须要编译jsx 语法,这里则写@babel/plugin-transform-react-jsx } } }前端
- 将less编译成浏览器识别的css
- 安装命令`npm install style-loader css-loader less-loader`
复制代码
//先建立一个less文件 body{ color:'#ffffff' } //引入less文件 import cs from './cs.less' //配置文件 { test:'/.less$/, use:[ { loader:'less-loader', }, { loader:'style-loader' }, { loader:'css-loader' } ] } //使用webpack命令进行打包 webapcknode
# 插件
## miniCssExtractPlugin,将所有的css文件打包到一个css文件中,实现js和css的分离。
- 安装命令`npm install mini-css-extract-plugin`
复制代码
//引入配置文件 const MiniCssExtractPlugin = require('mini-css-extract-plugin'); //在module的同级文件下建立plugins数组 plugins:[ new MiniCssExtractPlugin({ filename:'[name].css, chunckFilename:'[id].css' }) ] //而后将less里的配置进行更改 { test:/.less$/, use:[ MiniCssExtractPlugin.loader, "css-loader", "less-loader" ] } //执行webpack命令,dist文件中会生成一个单独的css文件react
## DefinePlugin,通常用来定义请求的地址的前缀
复制代码
//配置文件,引入webpack const webpack = reqiure('webpck') //在plugins中建立一个 new webpack.DefinePlugin({ 'SERVICE_URL':'www.sina.com' }) //在home.js文件中更改一下数据 async function sayHello (){ const result = await fetch(SERVICE_URL) console.log(result) } sayHello() //执行一些webpack,去bundle.js查看会发现SERVICE_URL变成了www.sina.comwebpack
## HtmlWebpackPlugin用于生成html文件,webpack主要是用来处理js文件的,当须要生成html文件时须要借助这个插件。
复制代码
//首先 安装html插件 npm install html-webpack-plugin -D //接着 配置文件,在plugins中建立一个 new HtmlWebpackPlugin({ title:'Hello world',//项目标题 template:'template.html',//自定义绑定的html,如若没有定义会自动在dist文件下生成一个html文件 }) //手动建立一个template.htmlweb
<%= htmlWebpackPlugin.options.title %>//绑定上面设置的标题 //能够引进其余的框架连接 //自定义标签 ``` ## 热替换 页面改变webpack自动打包,页面实时更新 ``` //首先 安装devServer插件 npm install webpack-dev-server //其次 在entry同级的文件下建立一个devServer对象,并配置 devServer:{ contentBase:path.join(__dirname,'dist'),//热替换的文件,这里的参数和entry必须保持一致 compress:true,//是否压缩 hot:true,//开启热替换 port:8080,//热替换的端口号 }复制代码