webpack基本使用

栏目: CSS · 发布时间: 5年前

内容简介:当在项目中直接运行webpack时,默认读取webpack.config.js中的配置,等同于运行 webpack webpack.config.jshtml-webpack-plugin: 可以指定模版生成html,并可以进行去除双引号、折叠空白符号之类的操作
npm install webpack webpack-cli webpack-dev-server -D
复制代码

1.基本配置 webpack.config.js

当在项目中直接运行webpack时,默认读取webpack.config.js中的配置,等同于运行 webpack webpack.config.js

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin')  //自动生成html

module.exports = {
  mode: 'development', // 可选development|production
  entry: path.join(__dirname, 'src', 'main.js'),
  watch: true,
  output: {
    path: path.resolve(__dirname, 'dist'),
    publicPath: '', // js 路径为public + path + filename
    filename: "main.js",
    chunkFilename: '[name].js'
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        // css-loader 导入css
        // style-loader 将css插入到style标签中
        use: ['style-loader', 'css-loader']
      },
      {
        test: /\.less$/, 
        use: ['style-loader', 'css-loader', 'less-loader']
      },
      {
        test: /\.html$/,  // 导入 html
        use: ['html-loader']
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      filename: 'index.html',
      template: 'index.html'
    })
  ],
  devtool: 'source-map',
  devServer: {
    contentBase: path.join('/dist/'),
    inline: true,
    host: '127.0.0.1',
    port: 3000,
  }
};
复制代码

2.html处理

html-webpack-plugin: 可以指定模版生成html,并可以进行去除双引号、折叠空白符号之类的操作

const HtmlWebpackPlugin = require('html-webpack-plugin')

plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html',
      filename: 'index.html',
      minify: {
        removeAttributeQuotes: true,
        collapseInlineTagWhitespace: true
      },
      hash: true
    })
]
复制代码

3.样式处理

3.1基本设置

module: {
    rules: [
      {
        test: /\.css$/,
        use: [{
          // 插入到style中
          loader: 'style-loader',
          options: {
            insertAt: 'bottom'
          }
        }, 'css-loader']
      },
      {
        test: /\.less$/,
        use: ['style-loader', 'css-loader', 'less-loader']
      }
    ]
}
复制代码

3.2 将所有的样式抽离到一个css文件

const MiniCssExtractPlugin= require('mini-css-extract-plugin')

module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader']
      },
      {
        test: /\.less$/,
        use: [MiniCssExtractPlugin.loader, 'css-loader', 'less-loader']
      }
    ]
}
复制代码

3.3 将样式自动添加前缀

cnpm install postcss-loader autoprefixer

// webpack.config.js
module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader', 'postcss-loader']
      },
      {
        test: /\.less$/,
        use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader', 'less-loader']
      }
    ]
}

// postcss.config.js
module.exports = {
  plugins: [
    require('autoprefixer')
  ]
}
复制代码

3.4 production 压缩css

const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');

module.exports = {
  optimization: {
    minimizer: [
      new OptimizeCSSAssetsPlugin()
    ]
  },
  mode: 'production', // production | development
}
复制代码

3.5 production 压缩js

cnpm install uglifyjs-webpack-plugin -D 
const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); //压缩js
module.exports = {
  optimization: { //优化项
    minimizer: [
      new UglifyWebpackplugin({
        test: /\.js(\?.*)?$/i,
        cache: true,
        // 是否并行处理
        parallel: true,
        sourceMap: true
      })
    ]
  }
}
复制代码

4. 转换es6语法以及校验

cnpm install babel-loader @babel/core @babel/preset-env -D

module.exports = {
    entry: ["@babel/polyfill", "./src/main.js"],
    module:[
    {
        test: /\.js$/,
        include: path.resolve(__dirname, 'src'),
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: [
              '@babel/preset-env'
            ],
            plugins: [
              "@babel/plugin-proposal-class-properties",
              "@babel/plugin-transform-runtime"
              //根据自己的需求自行添加
            ]
          }
        }
    },
    {
        test: /\.js$/,
        use: {
            loader: 'eslint-loader',
            options: {
                enfore: 'pre'
            }
        }
    }
]
}

复制代码

5. 全局变量引入的问题(以jquery为例)

  • 全局loader expose-loader
  • 前置loder
  • 普通loader
  • 内联loader
  • 后置loader postcss-loader

5.1 import $ from 'jquery' 时

module = [
    test: require.resove('jquery'),
    use:'expose-loader?$'
]
复制代码

5.2 将

const webpack = require('webpack')
plugins: [
    new webpack.ProvidePlugin({
      $: 'jquery'
    })
],
复制代码

6.处理图片

6.1 处理css,js中的图片引用

module: [
     {
        test: /.(jpg|jpeg|png|gif|svg)$/,
        use:'file-loader'
    }
]
复制代码

6.2 处理html中引入的图片

module: [
     {
        test: /.html$/,
        use:'html-withimg-loader'
    }
]
复制代码

6.3 将小的图片转成base64,减少http请求

module: [
     {
        loader: 'url-loader',
        options: {
          // 小于50k的图片转成base64
          limit: 50 * 1024, // 50k
          name: '[hash:8].[ext]',
          outputPath: './images'
        }
    }
]
复制代码

7.打包文件分类

//img
module: [
     {
        loader: 'url-loader',
        options: {
          // 小于50k的图片转成base64
          limit: 50 * 1024, // 50k
          name: '[hash:8].[ext]',
          outputPath: '/images/',   //图片打包到images下
          //打包后为图片的引入路径前添加url前缀,可以在需要将图片使用cdn的时候用(和其他文件的publicPath不同)
          //publicPath: 'http://www.xxxcdn.com/'  
        }
    }
]
//css
plugins: [
  new MiniCss({
      filename: 'css/main.css' // 会将css文件打包为  dist/css/main.css
    }),
]

// js
output: {
  filename: 'js/main.js'
}
复制代码

以上所述就是小编给大家介绍的《webpack基本使用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

成功由我

成功由我

刘世英、彭征 / 湖南人民出版社 / 2010-2 / 28.00元

《成功由我:李彦宏快乐成功之道》讲述:他,18岁高分考入北京大学,毕业后到美国名校学习最热门的计算机专业,然后闯荡于华尔街和硅谷这两大金融和技术圣地,31岁回国创立百度……到如今身价数十亿美元,领导的百度发展成为全球第二大搜索引擎,在国内搜索市场占据近八成的市场份额,将有“上帝”之称的Google抛在身后,最近他又掀起了“框计算”风暴,并雄心万丈宣称“未来十年,要让百度在全球一半以上国家成为家喻户......一起来看看 《成功由我》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具