• webpack 核心概念


    webpack 核心概念

    1. Entry

    Entry 介绍

    Entry 用来指定 webpack 的打包入口

    模块打包器

    依赖图的入口是 entry

    对于非代码来说,比如图片、字体依赖也会不断的加入到依赖图里面。

    然后在 webpack 处理以后,就没有依赖了,全部弄成静态的资源。

    Entry 的用法

    • 单入口:entry 是一个字符串

      适用于单入口的页面,或者单页应用

      module.exports = {
        entry: './path/to/my/entry/file.js'
      };
      
    • 多入口:entry 是一个对象

      适合多入口的场景,多页应用

      module.exports = {
        entry: {
          app: './src/app.js',
          adminApp: './src/adminApp.js'
        }
      };
      

    2. Output

    Output 介绍

    Output 用来告诉 webpack 如何将编译后的文件输出到磁盘

    Output 的用法:

    • 单入口的配置

      module.exports = {
        entry: './path/to/my/entry/file.js',
        output: {
          filename: 'bundle.js',
          path: __dirname + '/dist'
        }
      };
      
    • 多入口的配置

      output 没有多入口的说法,只是说,通过 占位符来确保文件名称的唯一性

      module.exports = {
      	entry: {
      		app: './src/app.js',
      		search: './src/search.js'
      	},
      	output: {
      		filename: '[name].js',		// // name 指定的是文件打包出来的名称
      		path: __dirname + '/dist'
      	}
      }
      

    3. Loaders

    Loaders介绍

    webpack开箱即用只支持 JS 和 JSON 两种文件类型,通过 Loaders 去支持其它文件类型并将它们转化成有效的模块,并且可以添加到依赖图中。

    Loaders 本身只是一个函数,接受源文件作为参数,返回转换的结果。

    目前常用的 Loaders :

    名称 描述
    babel-loader 转换 ES6、ES7 等 JS 新特性语法
    css-loader 支持.css文件的加载和解析
    less-loader 将 less 文件转换成 css
    ts-loader 将 ts 转换为 js
    file-loader 进行图片、文字的打包
    raw-loader 将文件以字符串的形式导入
    thread-loader 多进程打包 JS 和 CSS

    Loaders 的用法

    const path = require('path');
    
    module.exports = {
      output: {
        filename: 'bundle.js'
      },
      module: {																	// loader放到 module 里面
        rules: [
          {test: /.txt$/, use: 'raw-loader'}		// test 指定匹配规则 use 指定使用的 loader 名称
        ]
      }
    };
    

    4. Plugins

    Plugins 介绍

    增强 webpack 的功能。

    插件用于 bundle 文件的优化,资源管理和环境变量注入。

    作用于整个构建的过程。(从构建开始,到构建结束,都可以作用)

    可以理解为 lodaer 做不了的事情,交给 plugins去完成。

    常见的 plugins

    名称 描述
    CommonsChunkPlugin 将 chunks 相同的模块代码提取成公共的 js
    CleanWebpackPlugin 清理构建目录
    ExtractTextWebpackPlugin 将 css 从 bundle 文件里提取成一个独立的 css 文件
    CopyWebpackPlugin 将文件或者文件夹拷贝到构建的输出目录
    HtmlWebpackPlugin 创建 html 文件去承载输出的 bundle
    UglifyjsWebpackPlugin 压缩 JS
    ZipWebpackPlugin 将打包出的资源生成一个 zip 包

    5. Mode(webpack 4)

    Mode介绍

    Mode 用来指定当前的构建环境是:production、development 还是 none

    设置 mode 可以使用 webpack 的内置函数,默认值是 production

    Mode 的内置函数功能

    选项 描述
    development 设置 process.env.NODE_ENV 的值为 development, 开启 NamedChunksPlugin 和 NamedModulesPlugin
    production 设置 process.env.NODE_ENV 的值为 production,开启FlagDependencyUsagePlugin, FlagIncludedChunksPlugin, ModuleConcatenationPlugin, NoEmitOnErrorsPlugin, OccurrenceOrderPlugin, SideEffectsFlagPlugin 和 TerserPlugin
    none 不开启任何优化选项
    • NamedChunksPlugin NamedModulesPlugin

    https://webpack.js.org/migrate/5/#update-outdated-options ,现在用法都变了

    这两个插件在开发的时候可以让你知道代码热更新的时候,控制台里显示出哪个模块进行了热更新、路径。

    开发的时候比较有用。

    • FlagDependencyUsagePlugin, FlagIncludedChunksPlugin, ModuleConcatenationPlugin, NoEmitOnErrorsPlugin, OccurrenceOrderPlugin, SideEffectsFlagPlugin 和 TerserPlugin

      默认帮你做一些生产阶段的压缩,默认识别package.json 里面 sideEffect 的一些参数,代码是否存在副作用等。

  • 相关阅读:
    GCD
    常用存储位置
    AFNetworking 不支持 text/plain,unacceptable content-type: text/plain
    iOS layer 动画
    自定义对象实现copy,遵守协议<NSCopying, NSMutableCopying>
    Objective-c学习笔记03——内存管理
    Objective-c学习笔记02——类(面向对象)01
    Objective-c学习笔记01——简介
    Objective-c——NSString
    开源网站
  • 原文地址:https://www.cnblogs.com/ssaylo/p/13639166.html
Copyright © 2020-2023  润新知