美文网首页
2022-05-31

2022-05-31

作者: 姜浩_19强化班 | 来源:发表于2022-05-30 20:57 被阅读0次

一.webpack打包基本原理

1.以入口文件单个模块为例

1.1获取模块内容

使用node.js的核心模块fs

// bundle.js

const fs = require('fs')

const getModuleInfo = file => {

    const body = fs.readFileSync(file, 'utf-8')

    console.log(body)

}

getModuleInfo('./src/index.js')

读出来的是字符串,可以用正则表达式提取import、export的内容以及路径名。

1.2分析模块内容

安装@babel/parser,把js文件的代码内容转换成js对象的形式,抽象语法树

1.3对模块内容做处理

遍历抽象语法树,将相对路径转为绝对路径;将ES6转化ES5

2.递归获取所有模块的信息

从入口模块开始,对每一个模块以及模块依赖的模块都调用getModuleInfo 进行分析,最终返回包含所有模块信息的对象

根据模块分析数据,生产浏览器运行的代码

手写loader

loader本质上是一个函数,会在我们加载一些文件时执行。

1.创建syncLoader.js

这个函数必须返回一个buffer或string

对于loader的编写,一定不要使用箭头函数,那样会改变this的指向。

// syncLoader.js

const loaderUtils = require('loader-utils')

module.exports = function (source) {

    const options = loaderUtils.getOptions(this)

    console.log(options)

    source += options.message

    // 可以传递更详细的信息

    this.callback(null, source)

}

2.配置webpack

const path = require('path')

module.exports = {

    mode: 'development',

    entry: {

        main: './src/index.js'

    },

    output: {

        path: path.resolve(__dirname, 'dist'),

        filename: '[name].js'

    },

    resolveLoader: {

        // loader路径查找顺序从左往右

        modules: ['node_modules', './']

    },

    module: {

        rules: [

            {

                test: /\.js$/,

                use: {

                  loader: 'syncLoader',

                  options: {

                    message: '1111'

                  }

                }

            }

        ]

    }

}

异步loader

const loaderUtils = require('loader-utils')

module.exports = function (source) {

    const options = loaderUtils.getOptions(this)

    const asyncfunc = this.async()

    setTimeout(() => {

        source += '走上人生颠覆'

        asyncfunc(null, res)

    }, 200)

}

相关文章

  • Vue3.0 为什么采用 Proxy和definePropert

    [Vue中文社区](javascript:void(0);) 2022-05-31 08:41 发表于北京 Obj...

  • 2022-06-04 因子论实盘记录

    一、交易记录 2022-05-31 8.08 元买入 17600 股唐人神。2022-06-01 8.13 元卖出...

  • 2022-05-31

    Nat Comm | 雌激素与上皮间质转化协同促进乳腺癌骨转移 原创图灵基因图灵基因2022-05-31 07:0...

  • 《棋王 树王 孩子王》读书笔记

    2022-05-31 19:15:54 《树王》里潜在的是蒙昧的良知,不是科学的,是原始的,但它面对的不是科学,而...

  • 2022-05-31

    中医临床实用方剂整理 中医王记涛 中医王记涛 2022-05-31 14:13 发表于河南 1.半夏泻心汤(黄连 ...

  • 我们都应该往前看

    2022-05-31 周二 北京 晴天 晚上在「MT买菜」上买了很多东西,菜、水、牛奶、水果等,然后一个人提上楼,...

  • 叙事第6课:哇卡的叙事访问练习

    中原焦点团队 坚持分享1415天 2022-05-31 一、哇卡的叙事结构 入口卡:切入来访者故事的关键词和关...

  • 复工啦

    2022-05-31 明天就要六一了,本来还想着连上假期在家多待几天呢,结果今天来上班得到消息明天全部上班了。不过...

  • 为什么现在人不再愿意努力了

    为什么现在人不再愿意努力了 2022-05-31 努力的人什么什么的,这样的话语特别的多,但是我们却发现,现在人越...

  • 只要有爱,生活就是饱满丰富的

    幸福日志2022-05-31 周一 晴 难得的和妈妈打了很长时间的电话,但是电话是不足够的,哪怕电话的那头能看见母...

网友评论

      本文标题:2022-05-31

      本文链接:https://www.haomeiwen.com/subject/hbctmrtx.html