webpack主要有四个核心概念:
1、入口(entry)
2、输出(output)
3、loader
4、插件(plugins)
入口(entry):
入口会只是webpack应该使用哪个模块,来作为构建其内部依赖图的开始。进入入口七点后,webpack会找出有哪些模块和库是入口起点(直接和间接)依赖的。在webpack中入口有多种方式来定义。
单个入口语法:
const config={ entry:"./src/main.js" }
对象语法:
const config={ app:"./src/main.js", vendors:"./src/vendors.js" }
输出(output):
output属性会告诉webpack在哪里输出它创建的bundles,以及如何命名这些文件,默认值为./dist
const config={ entry:"./src/main.js", output:{ filename:"bundle.js", path:path.resolve(__dirname,'dist') } }
loader:
loader让webpack可以去处理那些非JavaScript文件(webpack资深只理解JavaScript)。loader可以将所有类型的文件转换为webpack能够有效处理的模块,例如,开发的时候使用ES6,通过loader将ES6的语法转为ES5,如下配置:
const config={ entry:"./src/main.js", output:{ filename:"bundle.js", path:path.resolve(__dirname,'dist') }, module:{ rules:[ { test:/.js$/, exclude:/node_modules/, loader:"babel-loader", options:[ presets:["env"] ] } ] } }
插件(plugins):
loader被用于转换某些类型的模块,而插件则可以做更多的事情。包括打包优化、压缩、定义环境变量等等。使用一个插件也非常容易,只需要require(),然后添加到plugins数组中
//通过npm安装 const HtmlWebpackPlugin=require('html-webpack-plugin'); //用于访问内置插件 const webpack=require('webpack'); const config={ module:{ rules:[ { test:/.js$/, exclude:/node_modules/, loader:"babel-loader" } ] }, plugins:[ new HtmlWebpackPlugin({template:'./src/index.html'}) ] }
利用webpack搭建应用:
webpack.config.js
const path = require('path');
module.exports = {
mode: "development", // "production" | "development"
// 选择 development 为开发模式, production 为生产模式
entry: "./src/main.js",
output: {
filename: "bundle.js",
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
test: /.js$/,
exclude: /node_modules/,
loader: "babel-loader",
options: [
presets: ["env"]
]
}
]
},
plugins: [
...
]
}
上述例子构建了一个最简单的配置,webpack 会从入口 main.js 文件进行构建,通过 loader 进行js转换,输出一个为 bundle.js 的文件,至此一整个过程就构建完成。