zoukankan      html  css  js  c++  java
  • Webpack打包工具分析

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

    webpack 主要有四个核心概念:

    • 入口 (entry)
    • 输出 (output)
    • loader
    • 插件 (plugins)

    入口 (entry)

    入口会指示 webpack 应该使用哪个模块,来作为构建其内部依赖图的开始。进入入口起点后,webpack 会找出有哪些模块和库是入口起点(直接和间接)依赖的。在 webpack 中入口有多种方式来定义,如下面例子:

    单个入口(简写)语法:

    const config = {
      entry: "./src/main.js"
    }

    对象语法:

    const config = {
      app: "./src/main.js",
      vendors: "./src/vendors.js"
    }

    输出 (output):

    output 属性会告诉 webpack 在哪里输出它创建的 bundles ,以及如何命名这些文件,默认值为 ./dist:

    const config = {
      entry: "./src/main.js",
      output: {
        filename: "bundle.js",
        path: path.resolve(__dirname, 'dist')
      }
    }

    loader

    loader 让 webpack 可以去处理那些非 JavaScript 文件( webpack 自身只理解 JavaScript )。loader 可以将所有类型的文件转换为 webpack 能够有效处理的模块,例如,开发的时候使用 ES6 ,通过 loader 将 ES6 的语法转为 ES5 ,如下配置:

    const config = {
      entry: "./src/main.js",
      output: {
        filename: "bundle.js",
        path: path.resolve(__dirname, 'dist')
      },
      module: {
        rules: [
          {
              test: /\.js$/,
              exclude: /node_modules/,
              loader: "babel-loader",
              options: [
                presets: ["env"]
              ]
          }
        ]
      }
    }

    插件 (plugins)

    loader 被用于转换某些类型的模块,而插件则可以做更多的事情。包括打包优化、压缩、定义环境变量等等。插件的功能强大,是 webpack 扩展非常重要的利器,可以用来处理各种各样的任务。使用一个插件也非常容易,只需要 require() ,然后添加到 plugins 数组中。

    // 通过 npm 安装
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    // 用于访问内置插件 
    const webpack = require('webpack'); 
     
    const config = {
      module: {
        rules: [
          {
              test: /\.js$/,
              exclude: /node_modules/,
              loader: "babel-loader"
          }
        ]
      },
      plugins: [
        new HtmlWebpackPlugin({template: './src/index.html'})
      ]
    };

    利用 webpack 搭建应用

    webpack.config.js

    const path = require('path');
     
    module.exports = {
      mode: "development", // "production" | "development"
      // 选择 development 为开发模式, production 为生产模式
      entry: "./src/main.js",
      output: {
        filename: "bundle.js",
        path: path.resolve(__dirname, 'dist')
      },
      module: {
        rules: [
          {
            test: /\.js$/,
            exclude: /node_modules/,
            loader: "babel-loader",
            options: [
              presets: ["env"]
            ]
          }
        ]
      },
      plugins: [
        ...
      ]
    }

    上述例子构建了一个最简单的配置,webpack 会从入口 main.js 文件进行构建,通过 loader 进行js转换,输出一个为 bundle.js 的文件,至此一整个过程就构建完成。

  • 相关阅读:
    Hibernate持久化对象修改id重新保存的办法
    hibernate实现数据实体复制保存
    MySQL 语句中执行优先级——and比or高
    Unity3D研究院之静态自动检查代码缺陷与隐患
    MVC模式在游戏开发的应用
    Unity3D的LightProbe动态光探头用法介绍
    高达渐出现效果Shader
    Unity3D战争迷雾效果
    从3D Studio Max导入物体 Importing Objects From 3D Studio Max
    从maya导入物体 Importing Objects From Maya
  • 原文地址:https://www.cnblogs.com/johnvwan/p/15598017.html
Copyright © 2011-2022 走看看