1 Star 0 Fork 0

lechan / fed-e-task-02-02

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

fed-e-task-02-02

1、Webpack 的构建流程主要有哪些环节?如果可以请尽可能详尽的描述 Webpack 打包的整个过程。

  • 识别入口文件,entry属性
  • 通过逐层识别模块依赖:commonjs、ESModule、AMD等等,来获取代码的依赖项,最后形成一个依赖树
  • 通过分析代码(AST),转换代码(Loader),编译代码,输出代码(Plugin)最终形成打包后的代码

2、Loader 和 Plugin 有哪些不同?请描述一下开发 Loader 和 Plugin 的思路。

  • Loader是一个文件转换器,它是转换指定类型的文件成为另一类文件的,单纯的文件转换。

  • Plugin是一个扩展器,可以用于打包的整个过程,不直接操作文件,而是基于事件机制,监听webpack打包过程中的某些节点,来执行一些对应的任务

  • 开发Loader:

    • 需要导出一个函数,输入是需要转换的文件内容,输出的就是一个转换后的内容(通过JavaScript代码包装后输出),类似一个工作管道
    • 转换的过程是可以经过多个loader处理的,最终形成需要的内容
    const marked = require('marked')
    
    module.exports = source => {
        const html = marked(source)
        return `module.exports = ${JSON.stringify(html)}`
    }
  • 开发Plugin:

    • Plugin通过hooks机制来实现

    • Plugin必须是一个函数或者是一个包含apply方法的对象

    • 在开发Plugin时一般是通过定义一个类class,然后通过创建该类的实例来使用

    // 清除bundle.js前面的注释
    class MyPlugin {
        apply(compiler) {
            compiler.hooks.emit.tap('MyPlugin', compilation => {
                for (const name in compilation.assets) {
                    
                    if (name.endsWith('.js')) {
                        const contents = compilation.assets[name].source()
                        const withoutComments = contents.replace(/\/\*\*+\*\//g, '')
                        compilation.assets[name] = {
                            source: () => withoutComments,
                            size: () => withoutComments.length
                        }
                    }
                }
            })
        }
    }

空文件

简介

暂无描述 展开 收起
JavaScript
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
JavaScript
1
https://gitee.com/lechan123/fed-e-task-02-02.git
git@gitee.com:lechan123/fed-e-task-02-02.git
lechan123
fed-e-task-02-02
fed-e-task-02-02
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891