Search code examples
herokukeystonejs

Keystone.js app startup fails on Heroku due to missing importer?


My Keystone.js 4 project using Node 10.15 is failing to start on Heroku:

Error: Cannot find module './lib/core/importer'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
    at Function.Module._load (internal/modules/cjs/loader.js:507:25)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)
    at Object.<anonymous> (/app/node_modules/keystone/index.js:6:16)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    Process exited with status 1
    State changed from crashed to starting
    Starting process with command `node ./dist/keystone.js`
    State changed from starting to crashed
    Process exited with status 1
    internal/modules/cjs/loader.js:583
    throw err;

I have other Keystone applications configured in exactly the same way that run correctly.

I have tried disabling the build cache, creating a new application instance to deploy to and have verified through the Heroku console that the file in question does exist in the source.

The project builds and runs correctly in Windows 10 and *nix environments locally.

What can I do to debug this?


Solution

  • So it seems the problem is due to npm 6.5.x not installing all of Keystone's dependencies. Switching to Yarn as the package manager fixes this.

    • I installed the latest version of Yarn, 1.13.0 as of now.
    • Installed dependencies via yarn
    • Committed the yarn.lock file
    • Specified "yarn": "1.13.0" in the "engines" section of my package.json and removed "npm" from the engines.
    • Re-deployed to Heroku and it works as expected.

    Hope this helps someone!