Установка 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