美文网首页
RollupCache

RollupCache

作者: lesliefang | 来源:发表于2022-11-16 22:59 被阅读0次

    Rollup 默认是开启了内存 cache 的。 resolveId , load 和 transform 的结果都会缓存在内存中不会重新解析。

    Rollup 在每次构建之间(每调用一次 rollup.rollup() 就是一次构建)也预留了 cache 的口子。

    constructor(private readonly options: NormalizedInputOptions, watcher: RollupWatcher | null) {
            if (options.cache !== false) {
                if (options.cache?.modules) {
                    for (const module of options.cache.modules) this.cachedModules.set(module.id, module);
                }
                this.pluginCache = options.cache?.plugins || Object.create(null);
    

    可以看到 Rollup 主要有 2 种类型的 cache
    moduleCache : 缓存的是每个 module 文件的 ast ,code , sourceMap ,resolve ,transform 结果等内容。
    pluginCache: 允许三方插件自定义一些 cache ,在插件中通过 this.cache.set(key,value), this.cache.get(key) 实现。

    const rollup = require('rollup');
    let cache;
    
    async function buildWithCache() {
      const bundle = await rollup.rollup({
        cache // 传入上次构建结果的 cache 
        // ... other input options
      });
      // 这里可以把本次构建结果的cache写入到文件或全局变量等
      cache = bundle.cache; 
      return bundle;
    }
    
    buildWithCache()
    

    Rollup 在每次构建时如果 options 中 (options.cache)传入了上次构建结果的缓存就会尝试复用上次构建的结果。我们可以把上次构建结果写入到json 文件下次构建时传入,这样可以一定程度改善 Rollup 冷启动的时间。 watch 模式不用担心,因为 watch 模式一直都有内存缓存。

    相关文章

      网友评论

          本文标题:RollupCache

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