Установка npm на laradock не работает

Я создал проект Laravel, используя Laradock. Когда я запускаю npm install, я получаю следующий вывод.

> node-sass@4.9.0 install /var/www/npmtest/node_modules/node-sass
> node scripts/install.js

fs.js:119
    throw err;
    ^

Error: EINVAL: invalid argument, open '/var/www/npmtest/node_modules/node-sass/package.json'
    at Object.openSync (fs.js:443:3)
    at Object.readFileSync (fs.js:348:35)
    at Object.Module._extensions..json (internal/modules/cjs/loader.js:719:20)
    at Module.load (internal/modules/cjs/loader.js:612:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
    at Function.Module._load (internal/modules/cjs/loader.js:543:3)
    at Module.require (internal/modules/cjs/loader.js:650:17)
    at require (internal/modules/cjs/helpers.js:20:18)
    at Object.<anonymous> (/var/www/npmtest/node_modules/node-sass/lib/extensions.js:7:9)
    at Module._compile (internal/modules/cjs/loader.js:702:30)
npm WARN rollback Rolling back is-fullwidth-code-point@1.0.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/npmtest/node_modules/gauge/node_modules/is-fullwidth-code-point'
npm WARN rollback Rolling back is-fullwidth-code-point@1.0.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/npmtest/node_modules/sass-graph/node_modules/is-fullwidth-code-point'
npm WARN rollback Rolling back chalk@1.1.3 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/npmtest/node_modules/node-sass/node_modules/chalk'
npm WARN rollback Rolling back string-width@1.0.2 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/npmtest/node_modules/gauge/node_modules/string-width'
npm WARN rollback Rolling back chalk@1.1.3 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/npmtest/node_modules/har-validator/node_modules/chalk'
npm WARN rollback Rolling back assert-plus@1.0.0 failed (this is probably 

...............

npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.4: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! node-sass@4.9.0 install: `node scripts/install.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the node-sass@4.9.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2018-06-22T04_51_41_566Z-debug.log

в основном это не в состоянии выполнить команду установки npm. Это прекрасно работает, если я создаю проекты Laravel вне докера. Кто-нибудь знает почему это?

3 ответа

Я столкнулся с этой проблемой также. Я не знаю, когда проблема была введена, так как я считаю, что раньше я мог бежать npm install на этом проекте раньше, но всегда возможно, что я использовал yarn install вместо этого (который, кажется, работает).

Тем не менее, мы пытаемся использовать npm, поэтому мне нужно, чтобы это работало.

Существует проблема, связанная с этим в докере для Windows GitHub Repo. Кажется, проблема в том, когда том смонтирован с использованием CIFS 3.02 вместо CIFS 2.0. Laradock использует bind mounts для томов, которые по умолчанию выглядят как 3.02.

Я не специалист по докеру, так что может быть лучше, но я смог выяснить, как обновить docker-compose.yml создать том с помощью CIFS 2.0, и это решило эту проблему для меня.

Под volumes: раздел, добавить новый том. Вы можете назвать его как угодно, кроме одного из существующих определенных томов. Я назвал мой code,

Версия Laradock> = 7.0.0: docker-compose.yml файл использует версию 3 и верхний уровень volumes: раздел определяется в верхней части файла.

Laradock версия <7: docker-compose.yml файл использует версию 2 и верхний уровень volumes: раздел определяется в нижней части файла.

К сожалению, поскольку это определение тома находится вне контекста сборки, вам необходимо жестко закодировать путь к вашему коду; Вы не сможете использовать APP_CODE_PATH_HOST переменная (или APPLICATION в < 7).

Ваш volumes: раздел будет выглядеть так:

volumes:
  mysql:
    driver: ${VOLUMES_DRIVER} (or "local")
  percona:
    driver: ${VOLUMES_DRIVER} (or "local")
  [other volumes removed for brevity...]
  code:
    driver: "local"
    driver_opts:
      type: cifs
      device: //10.0.75.1/C/path/to/your/code/
      o: "rw,relatime,vers=2.0,sec=ntlmsspi,cache=strict,username=[your user name],password=[your password],domain=[your domain, if any; otherwise remove this],uid=0,noforceuid,gid=0,noforcegid,addr=10.0.75.1,file_mode=0755,dir_mode=0755,iocharset=utf8,nounix,serverino,mapposix,nobrl,mfsymlinks,noperm,rsize=1048576,wsize=1048576,echo_interval=60,actimeo=1"

Вам нужно будет обновить device: вариант с путем к вашему коду, и вам нужно будет обновить o: возможность ввести свое имя пользователя, пароль и домен. Не стесняйтесь создавать переменные в вашем .env файл и использовать их здесь.

Как только ваш новый том будет определен, вам нужно будет обновить workspace Сервис для использования нового тома.

Версия Laradock> = 7.0.0: В volumes: раздел для вашего workspace обслуживание, замена ${APP_CODE_PATH_HOST} с названием вашего нового тома (например, code). Ваш workspace Определение объема будет выглядеть так:

      volumes:
        - code:${APP_CODE_PATH_CONTAINER}

Версия Laradock <7: в volumes: раздел для вашего applications обслуживание, замена ${APPLICATION} с названием вашего нового тома (например, code). Если твой applications сервис не имеет volumes: раздел, добавьте его. Ваш applications Определение раздела будет выглядеть так:

      applications:
        image: tianon/true
        volumes:
          - code:/var/www

Теперь, когда вы поднимаете свои контейнеры и заходите в свой workspace контейнер, ваш объем должен быть установлен с использованием CIFS 2.0. Вы можете проверить, запустив mount | grep cifs и вижу, что это говорит vers=2.0 в опциях.

node-sassТеперь скрипт установки должен найти файл package.json. Предполагая, что вы не столкнетесь с другими ошибками, npm install должно сработать.

Я также столкнулся с той же проблемой с laradock, хотя у меня нет решения для использования NPM. Это должно работать с использованием yarn install У меня недостаточно знаний, чтобы понять, почему это происходит, но я надеюсь, что это поможет:)!

Попробуйте перестроить контейнер рабочей области:

docker-compose build workspace
Другие вопросы по тегам