cache-loader

[![npm][npm]][npm-url] [![node][node]][node-url] [![deps][deps]][deps-url] [![tests][tests]][tests-url] [![coverage][cover]][cover-url] [![chat][chat]][chat-url] [![size][size]][size-url]

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

起步

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

  1. npm install --save-dev cache-loader

在一些性能开销较大的 loader 之前添加此 loader,以将结果缓存到磁盘里。

webpack.config.js

  1. module.exports = {
  2. module: {
  3. rules: [
  4. {
  5. test: /\.ext$/,
  6. use: ['cache-loader', ...loaders],
  7. include: path.resolve('src'),
  8. },
  9. ],
  10. },
  11. };

⚠️ 请注意,保存和读取这些缓存文件会有一些时间开销,所以请只对性能开销较大的 loader 使用此 loader。

选项

Name

Type

Default

Description

Name

cacheContext

Type

{String}

Default

undefined

Description

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

Name

cacheKey

Type

{Function(options, request) -> {String}}

Default

undefined

Description

Allows you to override default cache key generator

Name

cacheDirectory

Type

{String}

Default

path.resolve('.cache-loader')

Description

Provide a cache directory where cache items should be stored (used for default read/write implementation)

Name

cacheIdentifier

Type

{String}

Default

cache-loader:{version} {process.env.NODE_ENV}

Description

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)

Name

write

Type

{Function(cacheKey, data, callback) -> {void}}

Default

undefined

Description

Allows you to override default write cache data to file (e.g. Redis, memcached)

Name

read

Type

{Function(cacheKey, callback) -> {void}}

Default

undefined

Description

Allows you to override default read cache data from file

Name

readOnly

Type

{Boolean}

Default

false

Description

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)

示例

Basic

webpack.config.js

  1. module.exports = {
  2. module: {
  3. rules: [
  4. {
  5. test: /\.js$/,
  6. use: ['cache-loader', 'babel-loader'],
  7. include: path.resolve('src'),
  8. },
  9. ],
  10. },
  11. };

Database Integration

webpack.config.js

  1. // Or different database client - memcached, mongodb, ...
  2. const redis = require('redis');
  3. const crypto = require('crypto');
  4. // ...
  5. // connect to client
  6. // ...
  7. const BUILD_CACHE_TIMEOUT = 24 * 3600; // 1 day
  8. function digest(str) {
  9. return crypto
  10. .createHash('md5')
  11. .update(str)
  12. .digest('hex');
  13. }
  14. // Generate own cache key
  15. function cacheKey(options, request) {
  16. return `build:cache:${digest(request)}`;
  17. }
  18. // Read data from database and parse them
  19. function read(key, callback) {
  20. client.get(key, (err, result) => {
  21. if (err) {
  22. return callback(err);
  23. }
  24. if (!result) {
  25. return callback(new Error(`Key ${key} not found`));
  26. }
  27. try {
  28. let data = JSON.parse(result);
  29. callback(null, data);
  30. } catch (e) {
  31. callback(e);
  32. }
  33. });
  34. }
  35. // Write data to database under cacheKey
  36. function write(key, data, callback) {
  37. client.set(key, JSON.stringify(data), 'EX', BUILD_CACHE_TIMEOUT, callback);
  38. }
  39. module.exports = {
  40. module: {
  41. rules: [
  42. {
  43. test: /\.js$/,
  44. use: [
  45. {
  46. loader: 'cache-loader',
  47. options: {
  48. cacheKey,
  49. read,
  50. write,
  51. },
  52. },
  53. 'babel-loader',
  54. ],
  55. include: path.resolve('src'),
  56. },
  57. ],
  58. },
  59. };

贡献

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

CONTRIBUTING

License

MIT