Webpack的定义及使用|青训营笔记

77 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天

一、本堂课重点内容:

  • webpack概念
  • 配置webpack的基础用法

二、详细知识点介绍:

webpack概念

www.webpackjs.com/

本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler) 。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph) ,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle

五个核心的概念:

Entry 入口,指示 webpack 以哪个文件为入口起点开始打包,分析构建内部依赖图。

Output 输出,指示 webpack 打包后的资源 bundles 输出到哪里去,以及如何命名。

Loader 让 webpack 能 够 去 处 理 那 些 非 JavaScript 文 件 (webpack 自 身 只 理 解 JavaScript)

Plugins 插件,可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩, 一直到重新定义环境中的变量等。

Mode 模式,指示 webpack 使用相应模式的配置。

三、实践练习例子:

基本用法

关于webpack的用法,基本围绕着"配置"展开,大致可分为两类,

流程类:作用于流程中,直接影响打包效果的配置项

工具类:除流程之外,提供更多工程化能力的配置项

流程类配置

输入(entry,context)-> 模块解析(resolve,externals)-> 模块转译(module)->后处理(optimization,mode,target)

配置webpack

webpack.config.js:

声明入口
    module.exports = {
        entry: './src/js/index.js'
    }
声明出口
module.exports = {
        entry: './src/js/index.js'output: { // 输出配置
    	 filename: './built.js', // 输出文件名 
         path: resolve(__dirname, 'dist'),  //打包后的输出位置
    
        filename: 'scripts/[name].[contenthash].js', //'bundle.js', //打包后的文件名  多个入口不能写固定一个名字
        clean: true,   //打包后清除上次内容
        assetModuleFilename: 'images/[contenthash][ext]', //静态文件打包地址/文件名
        publicPath: ''
	 },
    }
添加Loader
npm add -D css-loader style-loader less-loader url-loader babel-loader
添加module处理文件
 module: {
    rules: [
      // 详细loader配置
     {
        test: /\.(jpg|gif|png)/,
        use: 'url-loader',
        option: {
          esModule: true,
          limint: 5 * 1024,    //图片是否转base64
          name: '[hash: 10].[ext]'  //图片命名
        }
      },
      {
        test: /\.(css|less)$/,
        // use: ['style-loader', 'css-loader', 'less-loader']  //从后往前编译 先解析在编译  行内样式
        use: ['MinCssExtractPlugin.loader', 'css-loader', 'less-loader'], //把css文件打包到一个css 用link引入到html中
      },
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env'],
            plugins: [
              [
                '@babel/plugin-transform-runtime'  //为promise解决
              ]
            ]
          }
        }
      },
 
    ]
  },
开启HMR(热启动)
devServer: {            //实时更新
        static: './dist'hot: true,   //开启热更新
        compress: true, // 启动gzip压缩
        port: 3000, // 端口号
        open: true // 自动打开浏览器
        proxy: {   //代理
          '/api': {
            target: 'http://localhost:3000',
            changeOrigin: true,
            ws: true,
            pathRewrite: {
              '^/api': ''
            }
      }
    }
  },

启动Webpack
npx webpack serve

四、课后个人总结:

以上就是webpack的基本认识了,对于新手来说可能会有一点难理解,知识点会比较抽象,但webpack是前端都要接触到的打包工具。主要难点在于理解Loader和Plugin(插件)的原理,但目前先学习好它的基础用法。