webpack的构建流程是什么?
初始化参数:从配置文件和 Shell 语句中读取与合并参数,得出最终的参数; 开始编译:用上一步得到的参数初始化 Compiler 对象,加载所有配置的插件,执行对象的 run 方法开始执行编译; 确定入口:根据配置中的 entry 找出所有的入口文件; 编译模块:从入口文件出发,调用所有配置的 Loader 对模块进行翻译,再找出该模块依赖的模块,再递归本步骤直到所有入口依赖的文件都经过了本步骤的处理; 完成模块编译:在经过第4步使用 Loader 翻译完所有模块后,得到了每个模块被翻译后的最终内容以及它们之间的依赖关系; 输出资源:根据入口和模块之间的依赖关系,组装成一个个包含多个模块的 Chunk,再把每个 Chunk 转换成一个单独的文件加入到输出列表,这步是可以修改输出内容的最后机会; 输出完成:在确定好输出内容后,根据配置确定输出的路径和文件名,把文件内容写入到文件系统。
web内置的内容
babel 转码器
webpack 常用插件
webpack加载任何类型的文件都需要一个loader
解析css
需要用到 style-loader css-loader
{test:/\.css$/,loader:['style-loader','css-loader']}
解析图片,解析矢量字体图标
需要用到 url-loader
{test:/\.(jpg|jpeg|png|gif|eot|ttf|woff|woff2|svg)$/,loader:'url-loader'}
解析sass
需要用到 sass-loader
严重依赖于node-sass 将sass文件转码为 css
{test:/\.(sass|scss)$/,use:['sass-loader','style-loader','css-loader']}
解析html
const htmtWebpackPlugin = require('html-webpack-plugin');plugins:[new htmtWebpackPlugin({filename:"index.html",//如果是通过devserver打开页面,devserver会自动创建一个空的htmltemplate:"index.html"})]
解析js
需要用到babel的全家桶
babel核心
babel 6.0 vue脚手架在使用
- babel-cli babel的命令行执行程序
- babel-core babel转码的核心库
- bebel-preset-env babel的转码规则
- babel-loader@7
babel 7.0 react脚手架在使用
- @babel/cli babel的命令行执行程序
- @babel/core babel转码的核心库
- @babel/preset-env babel的转码规则
- babel-loader
{
test:/\.(js|jsx)$/,
loader:'babel-loader'
}
启动服务
需要用到 webpack-dev-server
devServer: {
host: config.host,
port: config.port,
// contentBase: path.join(__dirname, 'dist'),
//开启服务器端gzip压缩,加快服务器端响应速度
compress: true,
//编译过程中的进度条
progress: true,
//编译过程有彩条
// color: true,
//自动打开页面
open: false,
//开启模块的热替换,同时在plugins中需要new 一下
hot: true,
historyApiFallback: true,
noInfo: true,
//当客户端请求服务端才去渲染
// lazy: true,
// 当页面有报错,将报错信息显示到页面
overlay: true,
index: 'index.html',
//before将返回一个expre的实例
//express 是nodejs小型web服务器
before(app) {
app.get('/api', (req, res) => {
res.json({
code: 1,
data: [{
name: "zhangsan",
age: 25
}, {
name: "lisi",
age: 20
}]
})
})
}
}
