资讯专栏INFORMATION COLUMN

浅析webpack源码之CachedInputFileSystem模块(六(1))

Channe / 2501人阅读

摘要:原本写的误操作被吞了,下面是代码记录这个模块主要做了缓存文件操作生成缓存容器目前他们是一样样的都是,区别在于调用方法传递参数不一样,分别储存不一个类型的缓存把文件信息赋值给对应属性自定义读取读取文件调用对象方法分别清除对应的,是传入什么,

原本写的误操作被吞了,下面是代码记录
这个模块主要做了缓存文件操作

module.exports = class CachedInputFileSystem {
    constructor(fileSystem, duration) {
        this.fileSystem = fileSystem;
        //生成缓存容器,目前他们是一样样的都是new Storage(duration),区别在于调用方法传递参数不一样,分别储存不一个类型的缓存
        this._statStorage = new Storage(duration);
        this._readdirStorage = new Storage(duration);
        this._readFileStorage = new Storage(duration);
        this._readJsonStorage = new Storage(duration);
        this._readlinkStorage = new Storage(duration);
        // 把文件信息赋值给对应属性
        this._stat = this.fileSystem.stat ? this.fileSystem.stat.bind(this.fileSystem) : null;
        if(!this._stat) this.stat = null;

        //...

        if(this.fileSystem.readJson) {
            this._readJson = this.fileSystem.readJson.bind(this.fileSystem);
        } else if(this.readFile) {
             // 自定义JSON读取
            this._readJson = (path, callback) => {
                // fs.readFile读取文件
                this.readFile(path, (err, buffer) => {
                    if(err) return callback(err);
                    let data;
                    try {
                        data = JSON.parse(buffer.toString("utf-8"));
                    } catch(e) {
                        return callback(e);
                    }
                    callback(null, data);
                });
            };
        } else {
            this.readJson = null;
        }
            //...

    
    }
    //调用Storage对象方法
    stat(path, callback) {
        this._statStorage.provide(path, this._stat, callback);
    }

    //...

    readlinkSync(path) {
        return this._readlinkStorage.provideSync(path, this._readlinkSync);
    }
    //分别清除对应的Storage,what是传入什么,清除什么,purge的中文的意思又整肃的意思,和clear有点区别,有完整清除不能被回退的感觉
    purge(what) {
        this._statStorage.purge(what);
        this._readdirStorage.purge(what);
        this._readFileStorage.purge(what);
        this._readlinkStorage.purge(what);
        this._readJsonStorage.purge(what);
    }
};

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/101200.html

相关文章

  • 浅析webpack源码NodeEnvironmentPlugin模块总览(

    摘要:进入传入地址出来一个复杂对象把挂载到对象上太复杂我们先看可以缓存输入的文件系统输入文件系统输出文件系统,挂载到对象传入输入文件,监视文件系统,挂载到对象添加事件流打开插件读取目录下文件对文件名进行格式化异步读取目录下文件同步方法就 进入webpack.js //传入地址,new Compiler出来一个复杂对象 compiler = new Compiler(options.conte...

    ChristmasBoy 评论0 收藏0
  • 浅析webpack源码Stat.js粗解(十)

    摘要:从出来接着我们看大法,打印一下感觉之前所以的对象都放在了一个合集里,给人而全的感觉里面主要含有一个对象,,输出的,等给每次打包一个值,代表唯一性天啊 从compilation出来接着我们看 const stats = new Stats(compilation); Stats.js log大法,打印一下 stats let Stats = { compilation:{ ...

    Andrman 评论0 收藏0
  • 浅析webpack源码convert-argv模块(二)

    摘要:接下来我看看一下函数我们先按照分支走为读取是里的对象,饶了这大的一个圈子,那么接下来一起来看一看对你的输入配置做了怎么样的处理吧 打开webpeck-cli下的convert-argv.js文件 // 定义options为空数组 const options = []; // webpack -d 检查 -d指令 if (argv.d) { //... } ...

    lemon 评论0 收藏0
  • 浅析webpack源码processOptions处理Options以及入口函数(三)

    摘要:我们打开根据上次所返回的这个因为有了上次的基础,比较容易读了大体逻辑是这样的先定义一个空对象同上次的一个逻辑,还是一个目前的方式只有一个满足如果满足的会执行一系列函数这个函数直接结果是的影响是打比如如果满足的话当你的时候就会在页面上出 我们打开bin/cli.js根据上次所返回的Options processOptions(options)这个因为有了上次的基础,比较容易读了,大体逻辑...

    doodlewind 评论0 收藏0
  • 浅析webpack源码WebpackOptionsApply 模块(七)

    摘要:还做了处理,是之所以能根据变化自己更新的核心,好凌乱,我们先从那个坑跳出来进入这个大坑进入这个页面看到前面一大堆的模块引入,已经给跪了,但是马马虎虎的完成也比放弃好前面一大堆的引入,主要是下和文件夹下的模块父类就只是定义了接口主要核心在方法 NodeEnvironmentPlugin还做了watch处理,NodeWatchFileSystem是webpack之所以能根据变化自己更新的核...

    AaronYuan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<