In our NodeJS app (call it our_app
), we have one dependency (call it our_dependency
, one we maintain in a private repo on GitHub) that has a prepare
script in its package.json
. Here’s a snippet from our_dependency
's package.json
:
"scripts": {
"build": "tsc",
"prepare": "npm run build",
...
},
Recently, builds for our_app
started failing, with an error of:
WORKER STDERR: Unhandled rejection Error: Cannot find module '/root/*********/our_app/node_modules/our_dependency/build/index.js'. Please verify that the package.json has a valid "main" entry
The lack of a file in node_modules/our_dependency/build/
makes me think CircleCI has changed something with how it’s storing data created from a prepare
script. We changed nothing related to this dependency, and I re-ran a build that passed perfectly fine a week ago, and it now fails with the same error.
Once I modified the package.json
in our_app
, which I believe forces a clean npm install
from scratch, then the build passes.
The config.yml
for our_app
does indeed use restore_cache
. Here’s a relevant snippet from that file:
version: 2.1
package-cache: &package-cache
key: npm-cache-{{ checksum "package.json" }}-{{ checksum "package-lock.json" }}
...
steps:
- checkout
- restore_cache:
<<: *package-cache
- run:
name: Install npm dependencies
command: |
# npm set used to set a variable or two
npm install
- save_cache:
<<: *package-cache
paths:
- ./node_modules
...
Anyone else seen this issue, or anyone from CircleCI who can help explain if something changed in the system with regards to this? Seems like if a prepare script ran, anything within node_modules
, including the contents of node_modules/our_dependency/build/
, should have been maintained in CircleCI’s cache, correct?
One last note: the build/
directory is set to be ignored in the our_dependency
repo. Think that could that be causing any weirdness with CircleCI’s caching?
Thanks!