Докеризация установки npm и bower с использованием образа докера digitallyseamless/nodejs-bower-grunt

Я пытаюсь использовать докер для запуска установки npm и Bower.

Вот моя конфигурация:

./package.json

{
  "name": "bignibou-client",
  "version": "0.1.0",
  "engines": {
    "node": "0.10.x"
  },
  "devDependencies": {
    "bower": "1.3.12",
    "grunt": "~0.4.5",
    "grunt-contrib-uglify": "~0.6.0",
    "grunt-contrib-concat": "~0.5.0",
    "karma": "~0.12.23",
    "grunt-karma": "~0.9.0",
    "karma-junit-reporter": "~0.2.2",
    "karma-jasmine": "~0.1.5",
    "karma-phantomjs-launcher": "~0.1.4",
    "phantomjs": "~1.9.11",
    "grunt-mkdir": "~0.1.2",
    "grunt-contrib-cssmin": "~0.10.0",
    "grunt-contrib-clean": "~0.6.0",
    "grunt-contrib-copy": "~0.7.0",
    "karma-htmlfile-reporter": "~0.1.2",
    "grunt-filerev": "~2.1.2",
    "grunt-usemin": "~2.6.2",
    "grunt-protractor-runner": "~1.1.4",
    "protractor": "~1.4.0",
    "flow": "~0.2.3",
    "assemble-less": "~0.7.0"
  },
  "scripts": {
    "postinstall": "node_modules/bower/bin/bower install"
  }
}

.bowerrc

{
    "json": "bower.json", "directory": "bignibou-client/src/bower_components"
}

Моя команда:

docker run --privileged=true -it --rm \
   -w /usr/src/app \
   -v $(pwd)/package.json:/usr/src/app/package.json  \
   -v $(pwd)/.bowerrc:/usr/src/app/.bowerrc \
   -v $(pwd)/./bower.json:/usr/src/app/bower.json  \
   -v ./build/npm.tmp/node_modules:/usr/src/app/node_modules  \
   -v ./build/npm.tmp/bignibou-client/src/bower_components:/usr/src/app/bignibou-client/src/bower_components \
   digitallyseamless/nodejs-bower-grunt npm install

Я просто получаю следующий вывод консоли:

npm WARN package.json [email protected] No description
npm WARN package.json [email protected] No repository field.
npm WARN package.json [email protected] No README data
npm WARN package.json [email protected] No license field.

а на хосте ничего не генерируется...

Может кто-нибудь дать совет, как заставить его работать или альтернативное решение?

изменить:

Выполнение следующей команды:

docker run --privileged=true -it --rm \
-w /usr/src/app \
-v $(pwd):/usr/src/app \
digitallyseamless/nodejs-bower-grunt npm install

приводит к:

npm WARN package.json [email protected] No repository field.
npm WARN package.json [email protected] No license field.
npm WARN cannot run in wd [email protected] node_modules/bower/bin/bower install (wd=/usr/src/app)

person balteo    schedule 19.08.2015    source источник


Ответы (1)


-v $(pwd)/package.json:/usr/src/app/package.json

этот флаг создаст каталог package.json, но не файл.

Вот как должна выглядеть ваша команда:

docker run --privileged=true -it --rm \
-w /usr/src/app \
-v $(pwd):/usr/src/app\
digitallyseamless/nodejs-bower-grunt bash -c "npm install && bower --allow-root install"

И после этого скрипта создайте node_modules и bower_components в текущем каталоге на HOST машине, и вы можете манипулировать результатом как хотите.

person Andrey Romashin    schedule 01.09.2015
comment
Спасибо Андрей. Я отредактировал свой пост, чтобы учесть ваш ответ. - person balteo; 01.09.2015
comment
Вам не нужно устанавливать bower, потому что он уже установлен в digitallyseamless/nodejs-bower-grunt как глобальный. И после удаления из package.json раздела postinstall и замены npm install из команды docker на bash -c "npm install && bower --allow-root install" ошибка npm WARN не может работать в wd должна быть устранена. - person Andrey Romashin; 01.09.2015
comment
Спасибо. Теперь это работает. Мне просто нужно найти способ решить одну небольшую оставшуюся проблему: раздел postinstall требуется для моей производственной среды (сборочный пакет Heroku). - person balteo; 01.09.2015
comment
если вам действительно нужен раздел postinstall, вы можете сделать следующее: Замените раздел postinstall следующим образом: "postinstall": "bower install" Измените команду docker на bash -c "npm install --unsafe-perm" - person Andrey Romashin; 01.09.2015
comment
Привет еще раз. Я оставил постустановочный скрипт в package.json и добавил это: --ignore-scripts в команду docker. Это работает очарование! Спасибо еще раз. - person balteo; 01.09.2015