# Wildcard/pattern cache\_directories

**URL:** <https://discuss.circleci.com/t/wildcard-pattern-cache-directories/5159>\
**Category:** Build Environment\
**Tags:** nodejs, caching, cache\
**Created:** [July 15, 2016, 10:10am UTC](https://discuss.circleci.com/t/wildcard-pattern-cache-directories/5159 "2016-07-15T10:10:16Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![jonfinerty](https://sea2.discourse-cdn.com/circleci/user_avatar/discuss.circleci.com/jonfinerty/32/13480_2.png) [@jonfinerty](https://discuss.circleci.com/u/jonfinerty)\
**Post date:** [July 15, 2016, 10:10am UTC](https://discuss.circleci.com/t/wildcard-pattern-cache-directories/5159/1 "2016-07-15T10:10:16Z")

</div>

Hi,

I’ve got a project in CircleCI which contains a few node projects within it.

At the moment our npm install step takes a long time (10mins) and I’d like to drastically reduce this with caching. However I’d rather not type out all the `node_modules` directories by hand, as these will change over time.

Is it possible to define a line in `cache_directories` to pick up any and all `node_modules` folders in the project and cache them?

Something like:

```auto
dependencies:
  cache_directories:
      - */node_modules

```

Thanks,

Jon

---

<div class="post-metadata">

**Author:** ![nevir](https://sea2.discourse-cdn.com/circleci/user_avatar/discuss.circleci.com/nevir/32/1989_2.png) [@nevir](https://discuss.circleci.com/u/nevir)\
**Post date:** [November 17, 2016, 8:53pm UTC](https://discuss.circleci.com/t/wildcard-pattern-cache-directories/5159/2 "2016-11-17T20:53:27Z")

</div>

Also interested in this (for the same reason)

---

<div class="post-metadata">

**Author:** ![JorgenEvens](https://sea2.discourse-cdn.com/circleci/user_avatar/discuss.circleci.com/jorgenevens/32/602_2.png) [@JorgenEvens](https://discuss.circleci.com/u/JorgenEvens)\
**Post date:** [February 20, 2017, 4:58pm UTC](https://discuss.circleci.com/t/wildcard-pattern-cache-directories/5159/3 "2017-02-20T16:58:03Z")

</div>

We also have a few repositories that are structured like this.

---

<div class="post-metadata">

**Author:** ![michaelahlers](https://sea2.discourse-cdn.com/circleci/user_avatar/discuss.circleci.com/michaelahlers/32/10126_2.png) [@michaelahlers](https://discuss.circleci.com/u/michaelahlers)\
**Post date:** [December 19, 2017, 9:25pm UTC](https://discuss.circleci.com/t/wildcard-pattern-cache-directories/5159/4 "2017-12-19T21:25:50Z")

</div>

There’s a not-inelegant workaround that takes advantage of shell command wildcards.

Generate checksums of all files declaring your dependencies (this example is for SBT projects, but I’m sure it may apply to similar build systems) immediately following your checkout command:

```
# Elided.
- checkout
- run: find . \( -name "dependencies.sbt" -o -name "plugins.sbt" \) -exec shasum {} \; > checksums
- *use_restore_cache
# Elided.

```

Then make the cache key include an aggregate checksum of that result:

```
- v1-{{ arch }}-{{checksum "checksums" }}

```

Equivalent to the feature request, easily understood, and adds little cruft to the configuration.

---

<div class="post-metadata">

**Author:** ![system](https://global.discourse-cdn.com/circleci/original/3X/5/1/511608acda8e85906e15909b57bd0a46c1dbe291.png) [@system](https://discuss.circleci.com/u/system)\
**Post date:** [June 18, 2018, 11:38am UTC](https://discuss.circleci.com/t/wildcard-pattern-cache-directories/5159/5 "2018-06-18T11:38:30Z")

</div>


