All Projects → webpack-contrib → Cache Loader

webpack-contrib / Cache Loader

Licence: mit
[DEPRECATED] Caches the result of following loaders on disk

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Cache Loader

Bigcache
Efficient cache for gigabytes of data written in Go.
Stars: ✭ 5,304 (+741.9%)
Mutual labels:  cache
Sdwebimage
Asynchronous image downloader with cache support as a UIImageView category
Stars: ✭ 23,928 (+3698.1%)
Mutual labels:  cache
Flask Caching
A caching extension for Flask
Stars: ✭ 582 (-7.62%)
Mutual labels:  cache
Cached
Rust cache structures and easy function memoization
Stars: ✭ 530 (-15.87%)
Mutual labels:  cache
React Esi
React ESI: Blazing-fast Server-Side Rendering for React and Next.js
Stars: ✭ 537 (-14.76%)
Mutual labels:  cache
Gf
GoFrame is a modular, powerful, high-performance and enterprise-class application development framework of Golang.
Stars: ✭ 6,501 (+931.9%)
Mutual labels:  cache
Imports Loader
Imports Loader
Stars: ✭ 500 (-20.63%)
Mutual labels:  webpack-loader
Httpcache
A Transport for http.Client that will cache responses according to the HTTP RFC
Stars: ✭ 603 (-4.29%)
Mutual labels:  cache
Responsive Loader
A webpack loader for responsive images
Stars: ✭ 536 (-14.92%)
Mutual labels:  webpack-loader
React Svg Loader
A loader for webpack, rollup, babel that loads svg as a React Component
Stars: ✭ 570 (-9.52%)
Mutual labels:  webpack-loader
Laravel Eloquent Query Cache
Adding cache on your Laravel Eloquent queries' results is now a breeze.
Stars: ✭ 529 (-16.03%)
Mutual labels:  cache
Go Cache
An in-memory key:value store/cache (similar to Memcached) library for Go, suitable for single-machine applications.
Stars: ✭ 5,676 (+800.95%)
Mutual labels:  cache
Valuestore
Easily store some values
Stars: ✭ 560 (-11.11%)
Mutual labels:  cache
Expose Loader
Expose Loader
Stars: ✭ 531 (-15.71%)
Mutual labels:  webpack-loader
Axios Extensions
🍱 axios extensions lib, including throttle, cache, retry features etc...
Stars: ✭ 594 (-5.71%)
Mutual labels:  cache
Androidvideocache
Cache support for any video player with help of single line
Stars: ✭ 4,849 (+669.68%)
Mutual labels:  cache
Bloom
🌸 HTTP REST API caching middleware, to be used between load balancers and REST API workers.
Stars: ✭ 553 (-12.22%)
Mutual labels:  cache
Boltons
🔩 Like builtins, but boltons. 250+ constructs, recipes, and snippets which extend (and rely on nothing but) the Python standard library. Nothing like Michael Bolton.
Stars: ✭ 5,671 (+800.16%)
Mutual labels:  cache
Wasm Loader
✨ WASM webpack loader
Stars: ✭ 604 (-4.13%)
Mutual labels:  webpack-loader
Carlos
A simple but flexible cache
Stars: ✭ 564 (-10.48%)
Mutual labels:  cache

DEPRECATED

Consider upgrading webpack to version 5 and setup cache https://webpack.js.org/configuration/other-options/#cache


npm node deps tests coverage chat size

cache-loader

The cache-loader allow to Caches the result of following loaders on disk (default) or in the database.

Getting Started

To begin, you'll need to install cache-loader:

npm install --save-dev cache-loader

Add this loader in front of other (expensive) loaders to cache the result on disk.

webpack.config.js

module.exports = {
  module: {
    rules: [
      {
        test: /\.ext$/,
        use: ['cache-loader', ...loaders],
        include: path.resolve('src'),
      },
    ],
  },
};

⚠️ Note that there is an overhead for saving the reading and saving the cache file, so only use this loader to cache expensive loaders.

Options

Name Type n Default Description
cacheContext {String} undefined Allows you to override the default cache context in order to generate the cache relatively to a path. By default it will use absolute paths
cacheKey {Function(options, request) -> {String}} undefined Allows you to override default cache key generator
cacheDirectory {String} findCacheDir({ name: 'cache-loader' }) or os.tmpdir() Provide a cache directory where cache items should be stored (used for default read/write implementation)
cacheIdentifier {String} cache-loader:{version} {process.env.NODE_ENV} Provide an invalidation identifier which is used to generate the hashes. You can use it for extra dependencies of loaders (used for default read/write implementation)
compare {Function(stats, dep) -> {Boolean}} undefined Allows you to override default comparison function between the cached dependency and the one is being read. Return true to use the cached resource
precision {Number} 0 Round mtime by this number of milliseconds both for stats and dep before passing those params to the comparing function
read {Function(cacheKey, callback) -> {void}} undefined Allows you to override default read cache data from file
readOnly {Boolean} false Allows you to override default value and make the cache read only (useful for some environments where you don't want the cache to be updated, only read from it)
write {Function(cacheKey, data, callback) -> {void}} undefined Allows you to override default write cache data to file (e.g. Redis, memcached)

Examples

Basic

webpack.config.js

module.exports = {
  module: {
    rules: [
      {
        test: /\.js$/,
        use: ['cache-loader', 'babel-loader'],
        include: path.resolve('src'),
      },
    ],
  },
};

Database Integration

webpack.config.js

// Or different database client - memcached, mongodb, ...
const redis = require('redis');
const crypto = require('crypto');

// ...
// connect to client
// ...

const BUILD_CACHE_TIMEOUT = 24 * 3600; // 1 day

function digest(str) {
  return crypto
    .createHash('md5')
    .update(str)
    .digest('hex');
}

// Generate own cache key
function cacheKey(options, request) {
  return `build:cache:${digest(request)}`;
}

// Read data from database and parse them
function read(key, callback) {
  client.get(key, (err, result) => {
    if (err) {
      return callback(err);
    }

    if (!result) {
      return callback(new Error(`Key ${key} not found`));
    }

    try {
      let data = JSON.parse(result);
      callback(null, data);
    } catch (e) {
      callback(e);
    }
  });
}

// Write data to database under cacheKey
function write(key, data, callback) {
  client.set(key, JSON.stringify(data), 'EX', BUILD_CACHE_TIMEOUT, callback);
}

module.exports = {
  module: {
    rules: [
      {
        test: /\.js$/,
        use: [
          {
            loader: 'cache-loader',
            options: {
              cacheKey,
              read,
              write,
            },
          },
          'babel-loader',
        ],
        include: path.resolve('src'),
      },
    ],
  },
};

Contributing

Please take a moment to read our contributing guidelines if you haven't yet done so.

CONTRIBUTING

License

MIT

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].