Узел и Докер, не может запускать скрипты после установки модулей узла

#node.js #docker

#node.js #докер

Вопрос:

Действительно пытаюсь определить проблему здесь. Я пытаюсь контейнеризировать сайт WordPress на своей рабочей станции для разработки. цели. (Отказ от ответственности: несколько новичок в Docker, в настоящее время использует его в нескольких проектах Laravel для той же цели, но еще не интегрировал его в производство).

Вот соответствующая часть моего docker-compose.yml

 version: "3"

services:
  ...
  npm:
    build:
      context: .
      dockerfile: ./docker/node/Dockerfile
    container_name: npm
    volumes:
      - ./:/var/www/html
      - /var/www/html/docker/
    working_dir: /var/www/html/wp-content/themes/my-cust-theme
    depends_on:
      - wordpress
    entrypoint: ["npm", "--no-bin-links"]
    networks:
      - wp-net
  ...

networks:
  wp-net:
 

Вот содержимое связанного файла Dockerfile (у меня было больше здесь, но в попытке отладки оно было сокращено до этого):

 FROM node:12.17.0-alpine3.9
RUN apk --update --no-cache --virtual build-dependencies add 
  git  
  libtool 
  python2 
  nasm 
  libpng-dev 
  autoconf 
  gcc 
  g   
  automake 
  make 
 

Я знаю, что здесь предпочтительнее многоступенчатая сборка или другие методы, упомянутые здесь. Просто пытаюсь заставить скрипты сборки узла функционировать, прежде чем оптимизировать свои контейнеры.

После сборки контейнеров с:

 docker-compose up -d --build
 

Я запускаю:

 docker-compose run --rm npm install
 

И пакеты, похоже, успешно установлены. Фактически, запуск после установки docker-compose run --rm npm list --depth 0 дает мне ожидаемый результат. Я вижу, что все пакеты в моем package.json были установлены.

Сценарии для моего проекта следующие:

 "scripts": {
    "debug": " webpack-dev-server --config webpack.dev.js",
    "dev": "webpack-dashboard -- webpack-dev-server --config webpack.dev.js",
    "production": "NODE_ENV=production npx webpack --config webpack.prod.js --progress --hide-modules"
  }
 

На данный момент я полностью потерян:
Если я запускаю

 docker-compose run --rm npm run dev
 

Вывод выглядит примерно так:

 Creating some-new-wp-site_npm_run ... done

> some-new-wp-site@1.0.0 dev /var/www/html/wp-content/themes/my-cust-theme
> webpack-dashboard -- webpack-dev-server --config webpack.dev.js

sh: webpack-dashboard: not found
npm ERR! code ELIFECYCLE
npm ERR! syscall spawn
npm ERR! file sh
npm ERR! errno ENOENT
npm ERR! some-new-wp-site@1.0.0 dev: `webpack-dashboard -- webpack-dev-server --config webpack.dev.js`
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the some-new-wp-site@1.0.0 dev 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/2021-01-23T15_51_28_095Z-debug
 

Я попытался запустить docker-compose down -v --rmi all и повторить этот процесс, и он дал идентичные результаты.

Комментарии:

1. Похоже, вам не хватает частей файла Dockerfile, в которых COPY содержится код приложения, и RUN последовательности сборки. Это то, что вы включили сюда целиком?

2. Возможно, я ошибаюсь, но разве volumes не указано docker-compose.yml , что нужно позаботиться об этом? Если нет, я не знаю, как / зачем docker-compose run --rm npm list --depth 0 вообще возвращать что-либо / все, что включено в мой package.json .

3. Если вы монтируете содержимое узла с привязкой к неспециализированному контейнеру узла, запуск узла непосредственно на хосте без докера, вероятно, будет гораздо более удобной настройкой для повседневной разработки.

4. Я вижу, как это было бы удобно. Но он не будет разрабатываться исключительно на одной машине, и я не хочу, чтобы версия узла узла была фактором, это делается для того, чтобы обойти необходимость nvm. Я попробую метод, о котором вы умолчали в своем первоначальном комментарии.

Ответ №1:

без npm err log я могу только догадываться, в чем проблема. вероятно, npm-cli не может найти команду webpack-dashboard and webpack-dev-server , потому что она не установлена глобально.

попробуйте добавить webpack-dashboard и webpack-dev-server в свои скрипты внутри package.json.

 "scripts": {
    ... your scripts,
    "webpack-dashboard": "webpack-dashboard",
    "webpack-dev-server": "webpack-dev-server"
  }
 

Комментарии:

1. Если в моем случае установлен локально /var/www/html/wp-content/themes/my-cust-theme/node_modules , разве он не будет запускаться оттуда?

2. да, вы можете запустить модуль напрямую, указав путь к модулю внутри ваших скриптов, но я настоятельно рекомендую способ добавления webpack-dashboard псевдонима к вашим скриптам! если путь изменится из-за изменений модуля, у вас возникнут огромные проблемы. проверьте мое решение и дайте мне знать, работает ли оно.

3. Возможно, я что-то пропустил… Но, похоже, это не сработало. Я установил глобально, добавил псевдоним, повторно запустил скрипт, получил ту же ошибку.

4. эта ошибка также возникает при запуске npm run debug ? если это так, дополнительно добавьте "webpack-dev-server": "webpack-dev-server" в свой package.json и повторите попытку npm run dev команды

5. Пробовал, не работает. Кроме того, стоит упомянуть, что он все еще говорит об этом webpack-dashboard: not found .