根据文档的定义:本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序须要的每一个模块,而后将全部这些模块打包成一个或多个 bundle。css
第一种用法
module.exports = {
entry:'index.js'
}
第二种用法
module.exports = {
entry:['index.js','b.js']
}
第三种用法
module.exports = {
entry:{
index:'index.js',
b:'b.js'
}
}
复制代码
推荐使用使用第三种方法,方便分清各个入口的定义html
module.exports = {
entry:{
index:'index.js',
b:'b.js'
},
output:{
path:path.resolve(__dirname,'dist'),
filename:'[name].min.[hash:5].js'
}
}
复制代码
在上面的例子中,node
module: {
+ rules:[
+ {
+ test:/\.css$/,
+ use:['style-loader','css-loader'],
+ include:path.join(__dirname,'./src'),
+ exclude:/node_modules/
+ }
+ ]
},
复制代码
module.exports = {
plugins: [
new UglifyjsWebpackPlugin()
]
}
复制代码
npm i webpack-dev-server -D
复制代码
+ devServer:{
+ contentBase:path.resolve(__dirname,'dist'),
+ host:'localhost',
+ compress:true,
+ port:8080
+ }
复制代码
npm i html-webpack-plugin -D
复制代码
plugins: [
+ new HtmlWebpackPlugin({
+ minify: {
+ removeAttributeQuotes:true
+ },
+ hash: true,
+ template: './src/index.html',
+ filename:'index.html'
})]
复制代码
由于CSS的下载和JS能够并行,当一个html文件很大的时候,咱们能够把css单独提取出来react
npm install --save-dev extract-text-webpack-plugin
复制代码
module: {
+ rules:[
+ {
+ test:/\.css$/,
+ use: ExtractTextWebpackPlugin.extract({
+ use:'css-loader'
+ }),
include:path.join(__dirname,'./src'),
exclude:/node_modules/
+ }
+ ]
},
plugins: [
+ new ExtractTextWebpackPlugin('css/index.css')]
复制代码
npm i less less-loader -D
npm i node-saas sass-loader -D
复制代码
const cssExtract=new ExtractTextWebpackPlugin('css.css');
const lessExtract=new ExtractTextWebpackPlugin('less.css');
const sassExtract=new ExtractTextWebpackPlugin('sass.css');
{
test:/\.less$/,
use: lessExtract.extract({
use:['css-loader','less-loader']
}),
include:path.join(__dirname,'./src'),
exclude:/node_modules/
},
{
test:/\.scss$/,
use: sassExtract.extract({
use:['css-loader','sass-loader']
}),
include:path.join(__dirname,'./src'),
exclude:/node_modules/
},
复制代码
为了浏览器的兼容性,有时候咱们必须加入-webkit,-ms,-o,-moz这些前缀webpack
Trident内核:主要表明为IE浏览器, 前缀为-msgit
Gecko内核:主要表明为Firefox, 前缀为-mozgithub
Presto内核:主要表明为Opera, 前缀为-oweb
Webkit内核:产要表明为Chrome和Safari, 前缀为-webkit正则表达式
npm i postcss-loader autoprefixer -D
复制代码
module.exports={
plugins:[require('autoprefixer')]
}
{
test:/\.css$/,
use: cssExtract.extract({
+ use:['css-loader','postcss-loader']
}),
include:path.join(__dirname,'./src'),
exclude:/node_modules/
},
复制代码
postcss-loader其它用法能够参考文档npm
Babel实际上是一个编译JavaScript的平台,能够把ES6/ES7,React的JSX转义为ES5
npm i babel-core babel-loader babel-preset-env babel-preset-stage-0 babel-preset-react -D
复制代码
{
test:/\.jsx?$/,
use: {
loader: 'babel-loader',
options: {
presets: ["env","stage-0","react"]
}
},
include:path.join(__dirname,'./src'),
exclude:/node_modules/
},
复制代码
webapck经过配置能够自动给咱们sourcemaps文件,map文件是一种对应编译文件和源文件的方法
module.exports = {
devtool:'eval-source-map'
}
复制代码
当代码发生修改后能够自动从新编译
new webpack.BannerPlugin(''),
watch: true,
watchOptions: {
ignored: /node_modules/, //忽略不用监听变动的目录
aggregateTimeout: 500, //防止重复保存频繁从新编译,500毫米内重复保存不打包
poll:1000 //每秒询问的文件变动的次数
},
复制代码
有时项目中没有引用的文件也须要打包到目标目录
npm i copy-webpack-plugin -D
复制代码
new CopyWebpackPlugin([{
from: path.join(__dirname,'public'),//静态资源目录源地址
to:'./public' //目标地址,相对于output的path目录
}]),
复制代码
npm i clean-webpack-plugin -D
复制代码
new cleanWebpaclPlugin(path.join(__dirname,'dist'))
复制代码
压缩JS可让输出的JS文件体积更小、加载更快、流量更省,还有混淆代码的加密功能 npm i uglifyjs-webpack-plugin -D plugins: [ new UglifyjsWebpackPlugin(),
webpack能够消除未使用的CSS,好比bootstrap中那些未使用的样式
npm i -D purifycss-webpack purify-css
npm i bootstrap -S
复制代码
{
test:/\.css$/,
use: cssExtract.extract({
use: [{
loader: 'css-loader',
+ options:{minimize:true}
},'postcss-loader']
}),
},
复制代码
+ new PurifyCSSPlugin({
+ //purifycss根据这个路径配置遍历你的HTML文件,查找你使用的CSS
+ paths:glob.sync(path.join(__dirname,'src/*.html'))
+ }),
复制代码
以上是webpack核心概念总结,对概念的理解,有助于整体了解下webpack不一样的做用,遇到相关问题,找对应的模块。
复制代码