Настроенные узлы выбирают сценарий при запуске npm

#node.js #docker #webpack

#node.js #docker #webpack

Вопрос:

Мне нужно настроить приложение nodejs, которое использует webpack. У меня есть этот скрипт ниже:

 "scripts": {
    "start": "cross-env NODE_ENV=development webpack-dev-server --open webpack --env.envConfig=hello --config configs/webpack.dev.js ",
    "build-dev": "cross-env NODE_ENV=development webpack --env.project=rm --env.envConfig=hello --env.publicPath=/ --config configs/webpack.dev.js",
    "build": "cross-env NODE_ENV=production webpack --env.project=rm --env.envConfig=hello --env.publicPath=/ --config configs/webpack.prod.js",
  },
  

Это мой фрагмент кода docker

 FROM node:10-alpine as builder

# copy the package.json to install dependencies
COPY . /build

WORKDIR /build

# Install the dependencies and make the folder
RUN npm install amp;amp; npm run build
  

Тем не менее, я хочу выбирать между npm run build и npm run build-dev всякий раз, когда я выполняю docker run . Возможно ли это? Если нет, могу ли я вместо этого передать параметры webpack docker run ?

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

1. нет, вы не можете выбирать между ними. образ создается с помощью этих команд. но что вы можете сделать, это создать позже, который запускает команду, а другой позже для другой команды. иногда он используется в качестве уровня сборки и выполнения кода. иногда слой для запуска тестов и так далее.

2.Вы можете запустить любую команду после создания образа docker… но файлы будут существовать только до тех пор, пока существует этот контейнер. docker run npm build docker run npm build-dev . Может быть, вы хотите выбрать, какой образ создавать? вместо того, какую команду запускать после создания образа.

Ответ №1:

Образ контейнера может быть выборочно собран с помощью аргумента build с помощью --build-arg

 FROM node:10-alpine as builder

# copy the package.json to install dependencies
COPY . /build

WORKDIR /build

ARG BUILD_TYPE build

# Install the dependencies and make the folder
RUN set -uex; 
    npm install; 
    npm run $BUILD_TYPE
  
 $ docker build --build-arg BUILD_TYPE=build-dev --tag me/app:build-dev .
$ docker build --tag me/app .
  

Ответ №2:

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

иногда он используется как слой сборки, иногда как слой для запуска тестов и так далее.

пример многослойной сборки — это:

https://github.com/BretFisher/docker-mastery-for-nodejs/blob/master/multi-stage-test/Dockerfile

вы можете использовать docker-compose для запуска определенного уровня:

 version: "3.7"


services:

  my-service:
    build:
      dockerfile: ./Dockerfile
      target: dev
    image: my-service

  

вы можете изменить цель, чтобы она была слоем, который вы хотите запустить