Heroku node_modules не кэшируется

У меня есть toplevel package.json, где я устанавливаю cacheDirectories согласно https://devcenter.heroku.com/articles/nodejs-support

"scripts": {
    "start": "npm --prefix frontend start && npm --prefix mockserver start",
},
"dependencies": {
},
"devDependencies": {
},
"cacheDirectories": ["frontend/node_modules", "mockserver/node_modules"],
...

Так что нет никаких зависимостей в toplevel, но у меня есть frontend/package.json и mockserver/package.json с множеством зависимостей, которые устанавливаются в их соответствующие node_modules. Вот как выглядит соответствующий package.jsons (например, mockserver):

"scripts": {
    "start": "npm install && npm run build && node dist/server.js",
 },
 dependencies...
 devdependencies...

Это работает нормально и развертывается, но не кэширует два узла node_modules, определенные для кэширования.

Вот выход из сборки героя:

-----> Creating runtime environment

       NPM_CONFIG_LOGLEVEL=error
       NPM_CONFIG_PRODUCTION=true
       NODE_VERBOSE=false
       NODE_ENV=demo
       NODE_MODULES_CACHE=true

       npm scripts will see NODE_ENV=production (not 'demo')
       https://docs.npmjs.com/misc/config#production
-----> Installing binaries
       engines.node (package.json):  7.10.0
       engines.npm (package.json):   unspecified (use default)

       Downloading and installing node 7.10.0...
       Using default npm version: 4.2.0
-----> Restoring cache
       Loading 2 from cacheDirectories (package.json):
       - frontend/node_modules (not cached - skipping)
       - mockserver/node_modules (not cached - skipping)
-----> Building dependencies
       Installing node modules (package.json)
-----> Caching build
       Clearing previous node cache
       Saving 2 cacheDirectories (package.json):
       - frontend/node_modules (nothing to cache)
       - mockserver/node_modules (nothing to cache)
-----> Build succeeded!

Просто заметьте, что два модуля node_modules были установлены в предыдущей сборке, но там написано (не кэшировано - пропущено).

Заранее спасибо!

1 ответ

Я получил ответ здесь: https://github.com/heroku/heroku-buildpack-nodejs/issues/435

Таким образом, я должен был использовать heroku-postbuild вместо сценария запуска для установки пользовательских зависимостей. И используйте запуск только в качестве команды запуска приложения.

Пакет верхнего уровня

  "scripts": {
    "heroku-postbuild": "npm --prefix frontend run installAndCompile && npm --prefix mockserver run installAndCompile",
    "start": "npm --prefix mockserver start"
  },

Подпроектный пакет.json

  "scripts": {
    "installAndCompile": "npm install && npm run compile"
  },
Другие вопросы по тегам