一:热更新HMR:
概念:Webpack 热更新的机制存在,则是修改了代码,不会导致刷新,而是保留现有的数据状态,只将模块进行更新替换。也就是说,既保留了现有的数据状态,又能看到代码修改后的变化。
比如:路由的更新;页面切换,不会造成原始变量的丢失
const webpack = require('webpack');const HtmlWebpackPlugin = require('html-webpack-plugin');const CleanWebpackPlugn = require('clean-webpack-plugin')module.exports = {mode: '',entry: {},output: {},rules: [{}],plugins: [new HtmlWebpackPlugin({template: './src/index.html'}) ,new CleanWabpackPlugin(),new webpack.HotModuleReplacementPlugin(); // 配置热更新插件],devServer: {contentBase: './dist',open: true,hot: true, // 热跟新开启proxy: {'/api': {target: '',changeOrigin: true,pathRewrite: {}}}}}
二:js里的热跟新:
// 在index.js 模块中判断引入模块代码的变化 只有引入的模块发生变化才能实现热跟新// 在其他的地方都将刷新页面import number from './js/number.js'number();// console.log(test) 刷新页面// 判断是否是热更新if(module.hot) {module.hot.accept('./number', () => {// 监听如果’./nuumber‘ 文件发生变化则调用回调const oldDiv = documnet.getElementById('number');document.body.remove(oldDiv) // 删除原先旧的divnumber() // 执行函数在新添加一个节点})}
function number () {const oDiv = document.createElement('div');oDiv.id = 'number';oDiv.innerText = 88;document.body.appendChild(oDiv);}export default number;
三:babel:打包ES6代码;
1、import ‘@bael/polyfill’; 解决map,promise的新特性等的函数的处理
在当前 的业务代码中处理es6新特性函数

加入useBuiltIns: ‘usage’: 按需处理es6新特性函数;
2、配置处理es6代码:
module.exports = {mode: 'development',entry: {},output: {},module: {rules: [ // 配置规则{test: /\.js$/,loader: 'babel-loader',options: {presets: ['@babel/preset-env']},exclude: /node_modules/,}],},devServer: {}}

3、、如果想开发一个第三方的类库需配置一个插件:
4、在文件根目录下创建一个.babelrc 文件, 防止都在webpack里配置,显得乱
在webpcak中的babel-loader, 不需要配置options了, 在babelrc文件中配置;
module.exports = {mode: 'development',entry: {main: './index.js' // 打包入口文件},output: {filename: 'boudle.js', // 打包后的js文件名、path: path.resolve(__dirname, 'dist'), // 打包后js放入的文件夹publicPath: 'http:// csdn.com.cn', // 在引入的src前面加上src: 'http://csdn.com'},module: {rules: [{test: /\.js$/,loader: 'babel-loader',exclude: /node_modules/, // 去除node_modules里面js文件的打包// options: [] 在.babelrc 文件中进行配置;}]},devServer: {open: true,contentBase: '/dist',proxy: {}}}
.babelrc
A:处理基本的react代码:
1、presets: [[‘@babel/preset-env’] ]// @babel/preset-env: 将es6代码转换为es5代码
// 用"" 这个格式;类似JOSN格式;如下图:

@bebel/preset-react; : 处理react代码变为es6代码;在交由@babel/preset-env:将es6代码转换为es5代码;
B:处理基本的Vue代码:
1、配置vue-loader
2、配置VueLoaderPlugin();
3、处理css, 配置: vue-style-loader
module.exports = {mode: 'development',module: {rules: [{test: /.vue$/,loader: 'vue-loader',},{test: /.css$/,use: ['vue-loader', 'css-loader', 'postcss-loader'], // 处理vue中style代码块}]},plugins: [new HtmlWebpackPlugin({template: './index.html',}),new CleanWebpackPlugin(),new VueLoaderPlugin(),]}




