本文介绍: webpack 是 Webpack核心模块webpackcli 是 Webpack 的 CLI 程序用来命令行调用 Webpackwebpackcli 所提供的 CLI 程序就会出现在 node_modules/.bin 目录当中我们可以通过 npx 快速找到 CLI 并运行它。npx webpack自动src/index.js 文件开始打包然后根据代码中的模块导入操作自动将所有用到模块代码打包到一起。

1、前端模块打包工具webpack

webpack 是 Webpack核心模块webpackcli 是 Webpack 的 CLI 程序用来命令行调用 Webpackwebpackcli 所提供的 CLI 程序就会出现在 node_modules/.bin 目录当中,我们可以通过 npx 快速找到 CLI 并运行它。npx webpack 会自动从 src/index.js 文件开始打包然后根据代码中的模块导入操作,自动将所有用到的模块代码打包到一起。之后项目根目录下多出了一个 dist 目录,我们的打包结果存放这个目录下的 main.js 文件中。

2、配置 Webpack打包过程

项目根目录src添加一个 webpack.config.jswebpack.config.js一个运行在 Node.js 环境中的 JS 文件,也就是说我们需要按照 CommonJS 的方式编写代码,这个文件可以导出一个对象,我们可以通过导出对象属性完成相应的配置选项
 

// ./webpack.config.js
import { Configuration } from 'webpack'  //代码提示
/**
 * @type {Configuration}
 */
const config = {
  entry: './src/index.js',
//resolve 配置是帮助 Webpack 查找依赖模块的,通过 resolve配置,
//可以帮助 Webpack 快速查依赖,也可以替换对应依赖
  output: {
    filename: 'bundle.js'
    path: path.join(__dirname, 'output')
  },
//resolve.extensions是帮助 Webpack 解析扩展名的配置
 resolve: {
     extensions: ['.js', '.json', '.css'],
     alias: {
            src: path.resolve(__dirname, 'src'),
            '@lib': path.resolve(__dirname, 'src/lib')
        }
  },
//
 mode: 'development',
}
module.exports = config

3、webpack 构建流程

4、loader原理

Loader本质就是一个函数,在该函数对接收到内容进行转换返回转换后的结果因为 Webpack 只认识 JavaScript,所以 Loader 就成了翻译官,对其他类型资源进行转译的预处理工作

sassloaderlessloader代码转换成csspostcssloaderCSS文件自动添加浏览器前缀cssloader :允许将css文件通过require方式引入,并返回css代码,然后css 资源转为 CommonJS 的 JS 模块。styleloader将 CommonJS 模块生成一个 style 标签插入到最终的文档中。

use: [‘styleloader’, ‘cssloader’, ‘postcss-loader’]

 file-loader 支持在 JS 模块中引入诸如 pngjpgsvg文本二进制文件,并将文件写出到输出目录

url-loader  可以识别图片大小,当文件小于给定阈值时把图片转换成内联base64 URL,这会减少小文件的 HTTP 请求数。如果文件大于阈值,会自动的交给 file-loader 处理

vue-loader用于处理单文件组件。 script 块中的内容被作为 js 处理,对所有*.js 配置babelloader。需要用 Vue 模板编译器编译 template,从而得到 render 函数。需要<style scoped>中的 CSS 做后处理(postprocess),该操作cssloader 之后但在 styleloader 之前

5、Plugin

Plugin就是插件基于事件框架Tapable,插件可以扩展 Webpack 的功能基于发布订阅模式(类似于eventbus),在 Webpack 运行生命周期中会广播出许多事件,Plugin 可以监听这些事件,在合适的时机通过 Webpack 提供的 API 改变输出结果

Plugin本质上来说,就是一个具有apply方法Javascript对象apply 方法会被 webpack compiler 调用,并且在整个编译生命周期可以访问 compiler 对象

const pluginName = 'ConsoleLogOnBuildWebpackPlugin';

class ConsoleLogOnBuildWebpackPlugin {
  apply(compiler) {
    compiler.hooks.run.tap(pluginName, (compilation) => {
      console.log('webpack 构建过程开始!');
    });
  }
}

module.exports = ConsoleLogOnBuildWebpackPlugin;

– entryoption :初始化 option

– compile: 真正开始的编译,在创建 compilation 对象之前

– compilation :生成好了 compilation 对象

– make:从 entry 开始递归分析依赖准备每个模块进行 build

– after-compile编译 build 过程结束

– emit :在将内存assets 内容写到磁盘文件夹之前

– after-emit :在将内存assets 内容写到磁盘文件夹之后

– done: 完成所有的编译过程 – failed编译失败时候

参考谈谈你对Webpack的理解 – 掘金 (juejin.cn)

6、bable解释流程

参考babel 处理流程管窥 – 知乎 (zhihu.com)

原文地址:https://blog.csdn.net/m0_56770663/article/details/134672672

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_30180.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注