webpack的基本配置

如何实现热更新

webpack-dev-server实现热更新(HMR)
安装webpack-dev-server

npm install webpack-dev-serve --save-dev

配置webpack.config.js文件

const webpack=require('webpack');//引入webpack
    entry:__dirname+'/src/main.js',
    output:{
        publicPath:'/dist',//必须加publicPath
        path:__dirname+'/dist',
        filename:'bundle.js'
    },
    devServer:{
        host:'localhost',
        port:'8080',
        open:true//自动拉起浏览器
        hot:true,//热加载
        //hotOnly:true
    },
    plugins:[
    //热更新插件
        new webpack.HotModuleReplacementPlugin()
    ]

如果只需要触发HMR,可以再加个参数hotOnly:true,这时候只有热更新,禁用了自动刷新功能。
如果需要自动刷新就不需要设置热更新。

热更新必须有以下5点:

  • 1.引入webpack
  • 2.output里加publicPath
  • 3.devServer中增加hot:true
  • 4.devServer中增加hotOnly:true
  • 5.在plugins中配置 new webpack.HotModuleReplacementPlugin()

用 Babel 7 转译 Javascript ES6

安装依赖

npm i babel-core babel-loader babel-preset-env --save-dev

创建名为 .babelrc 的新文件来配置babel
.babelrc代码

{
    "presets": [
        "env"
    ]
}

配置babel-loader :在 webpack.config.js 文件中的module.exports 写入代码

  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader"
        }
      }
    ]
  }

以上步骤就实现了转码ES6。

webpack打包CSS模块

webpack打包CSS模块需要使用 loader去解析它们。
安装依赖

npm i mini-css-extract-plugin css-loader style-loader --save-dev

css-loader: 解析css文件并且支持@import()等引入css模块
style-loader: 通过插入 style 标签将CSS添加到DOM中
mini-css-extract-plugin: 此插件将CSS提取到单独的文件中

webpack配置代码

module.exports = {
     ...
     module: {
       rules: [
         {
           test: /\.css$/,
           use: ['style-loader', 'css-loader']
         },
         {
           test: /\.css$/,
           use: [
             MixiCssExtractPlugin.loader,
             'css-loader'
            ]
         }
       ],
       plugins: [
	       new MixiCssExtractPlugin({
	         filename: "[name].css",
	         chunkFilename: "[id].css"
	       })
       ]
     }
   }

处理sass文件

安装sass sass-loader

npm i sass sass-loader --save-dev

webpack配置如下

module.exports = {
     ...
     module: {
       rules: [
         {
           test: /\.css$/,
           use: ['style-loader', 'css-loader']
         },
         {
           test: /\.css$/,
           use: [
             MixiCssExtractPlugin.loader,
             'css-loader',
             // 新加以下代码
             'sass-loader'
            ]
         }
       ],
       plugins: [
	       new MixiCssExtractPlugin({
	         filename: "[name].css",
	         chunkFilename: "[id].css"
	       })
       ]
     }
   }

优化压缩CSS文件和JS文件
安装

npm i optimize-css-assets-webpack-plugin uglifyjs-webpack-plugin --save-dev

optimize-css-assets-webpack-plugin: 用于优化\最小化CSS资产的Webpack插件
uglifyjs-webpack-plugin: 用于优化 js资产的 Webpack插件

webpack新增配置:

const OptimizeCssAddetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')
const UglifyjsWebpackPlugin = require('uglifyjs-webpack-plugin')
module.exports = {
    mode: 'production',
    optimization: {
        minimizer: [
            new UglifyjsWebpackPlugin({
                test: /\.js(\?.*)?$/i,
                cache: true,
                parallel: true, // 并行化可以显著加速构建,因此强烈建议设置为 true
                sourceMap: true, // 使用源映射,将错误信息位置映射到模版
            }),
            // 使用压缩css插件之前,一定要使用 uglifyjs-webpack-plugin插件对js代码进行压缩
            new OptimizeCssAddetsWebpackPlugin({}),
        ]
    }
  }

script-loader
该loader使对应的js文件在全局环境中运行一次。比如我们在工程中使用了 jquery 的插件,需要全局暴露 , 我 们 就 需 要 让 j q u e r y 文 件 在 全 局 环 境 中 运 行 , 以 便 让 它 把 ,我们就需要让jquery文件在全局环境中运行,以便让它把 ,jquery便挂载到全局变量中,效果和在浏览器中加script标签一样。

import 'jquery';

module: {
    rules: [
        {
        test: /jquery$/,
        use: [ 'script-loader' ]
        }
    ]
}

Files Loaders
url-loader 和 file-loader 是一对用来处理图片、svg、视频、字体等静态资源文件的loader。一般体积比较小的资源交给 url-loader 处理,编码为base64字符串,直接嵌入js文件中。体积较大的文件由file-loader处理,直接释放为了一个输出文件。

{
    test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
    loader: 'url-loader',
    options: {
        limit: 10000,
        name: 'img/[name].[hash:7].[ext]'
    }
},

一般只配置 url-loader 即可,在资源超过limit的时候, url-loader 会将资源自动交给 file-loader 处理,并将options内容也传递给file-loader。

HtmlWebpackPlugin
HtmlWebpackPlugin插件可以用来生成包含你所有打包文件(js和css)的html文件,特别是你在打包文件名配置了hash,就不得不用这个插件了。

module.exports = {
  plugins: [
      new HtmlWebpackPlugin({
          template: path.resolve(__dirname, 'src/index.html'),  
          filename: 'static/index.[hash].html',  
          inject: true, 
          minify: false, 
          chunks: ['app', 'vendor'] 
      })
  ]
};
  • template: HtmlWebpackPlugin生成html文件的模板,如果简单的话可以直接通过其他配置项生成,不必单独提供一个html文件模板,详情可参考 HtmlWebpackPlugin
  • filename: 输出的html文件名,规则和output的filename相同
  • inject: 是否注入打包的文件,包括js和通过MiniCssExtractPlugin打包输出的css文件,默认为true
    minify: 是否压缩
  • chunks: 只注入某些特定chunk的输出文件,在多文件场景下比较有用

大部分插件看[这篇文章]或者去官网(https://www.codercto.com/a/18825.html)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Webpack是一个现代化的前端构建工具,它可以帮助开发者将多个模块打包成一个或多个最终的静态资源文件。下面是Webpack配置基本使用方法: 1. 安装Webpack:可以通过npm或者yarn安装Webpack。在命令行中执行以下命令: ``` npm install webpack webpack-cli --save-dev ``` 2. 创建Webpack配置文件:在项目根目录下创建一个名为`webpack.config.js`的文件,该文件是Webpack配置文件。 3. 配置入口和出口:在`webpack.config.js`中配置入口和出口。入口是指Webpack开始构建的入口文件,出口是指Webpack构建后生成的输出文件。例如: ```javascript // webpack.config.js const path = require('path'); module.exports = { entry: './src/index.js', output: { path: path.resolve(__dirname, 'dist'), filename: 'bundle.js' } }; ``` 4. 配置加载器(Loaders):Webpack支持使用加载器来处理各种类型的文件,例如将ES6代码转换为ES5、将SCSS转换为CSS等。可以在`webpack.config.js`中配置加载器。例如,使用Babel加载器处理ES6代码: ```javascript // webpack.config.js module.exports = { // ... module: { rules: [ { test: /\.js$/, exclude: /node_modules/, use: { loader: 'babel-loader' } } ] } }; ``` 5. 配置插件(Plugins):Webpack还支持使用插件来进行更高级的功能扩展。可以在`webpack.config.js`中配置插件。例如,使用HtmlWebpackPlugin插件生成HTML文件: ```javascript // webpack.config.js const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { // ... plugins: [ new HtmlWebpackPlugin({ template: './src/index.html' }) ] }; ``` 6. 运行Webpack:在命令行中执行以下命令来运行Webpack构建项目: ``` npx webpack ``` 以上是Webpack基本配置和使用方法,你可以根据自己的需求进行更详细的配置和使用。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值