[webpack-cli][Ошибка: EEXIST: файл уже существует, откройте «….»] — Среда докеров

#laravel #docker #docker-compose #laravel-mix #webpack-cli

Вопрос:

Это с помощью Docker. Это работает при использовании wsl2 , но при использовании hyper-v у меня возникает проблема.

Я пытаюсь запустить mix watch -- --watch-options-poll=3000 или mix --production , но каждый раз, когда я запускаю его, у меня возникает следующая проблема.

[webpack-CLI и] [ошибка: возвращать eexist: файл уже существует, открыть ‘/ВАР/www в/HTML-код/общественных/сайт/изображения/электронной сторону.формат PNG’] { ошибка: -17,
код: ‘возвращать eexist’, системный вызов: ‘открыть’, путь: ‘/ВАР/www в/HTML-код/общественных/сайт/изображения/электронной сторону.формат PNG’ }

webpack.mix.js

 const mix = require('laravel-mix');
const oldMix = require('laravel-mix');
const path = require('path');
const glob = require('glob');
const PurgeCSSPlugin = require('purgecss-webpack-plugin');

//-- Website Mix --
mix.babelConfig({
   plugins: ['@babel/plugin-syntax-dynamic-import', '@babel/plugin-proposal-class-properties', '@babel/plugin-proposal-optional-chaining'],
});

mix.webpackConfig({
    watchOptions: {
        ignored: /node_modules/
    },
    stats: {
        warnings: false,
    },
    output: {
        chunkFilename: 'website/js/chunks/[chunkhash].js',//replace with your path
    },
    resolve: {
        alias: {
            '@fonts': path.resolve(__dirname, 'resources/website/styles/fonts'),
            '@images': path.resolve(__dirname, 'resources/website/images')
        }
    },
    plugins: [
        new PurgeCSSPlugin({
            paths: glob.sync('website/*',  { nodir: true }),
        })
    ]
});

mix.options({
    postCss: [
        require('autoprefixer'),
    ],
    fileLoaderDirs:  {
        fonts: 'website/fonts',
        images: 'website/images'
    }
});

mix.js('resources/website/index.js', 'public/website/js').react();
mix.version();
//-- Website Mix End --

//-- Old Application and Dashboard --
oldMix.webpackConfig({
    watchOptions: {
        ignored: /node_modules/
    }
});

oldMix.babel([
    'public/old/Scripts/Core/Primitive/jQuery.js',
    'public/old/Scripts/Core/Primitive/Slick.js',
    'public/old/Scripts/Core/Primitive/Angular.js',
    'public/old/Scripts/Core/Primitive/Bootstrap.js',
    'public/old/Scripts/Core/Primitive/Masonry.js',
    'public/old/Scripts/Core/Primitive/Images.js',
    'public/old/Scripts/Core/Primitive/Moment.js',
    'public/old/Scripts/Core/Primitive/Date.js',
    'public/old/Scripts/Core/Primitive/UTM.js',
    'public/old/Scripts/Dashboard/Tinymce/TinyMCE.js',
    'public/old/Scripts/Core/Primitive/Pusher.js',
    'public/old/Scripts/Core/Primitive/Reviews.js',
    'public/old/Scripts/Core/Primitive/Fancybox.js',
    'public/old/Scripts/Core/Primitive/Confetti.js',
    'public/old/Scripts/Core/Primitive/Signature.js',
], 'public/old/Build/Scripts/Primitive.js');

oldMix.babel([
    'public/old/Scripts/Core/Angular/*.js',
    'public/old/Scripts/Dashboard/Tinymce/UITinyMCE.js'
], 'public/old/Build/Scripts/Directives.js');

oldMix.babel([
    'public/old/Scripts/Dashboard/UI.js',
    'public/old/Scripts/Dashboard/Modules/OriginFactories.js',
    'public/old/Scripts/Dashboard/Modules/AddonsControllers.js',
    'public/old/Scripts/Dashboard/Modules/ProductsControllers.js',
    'public/old/Scripts/Dashboard/Modules/BoilerAdviceControllers.js',
    'public/old/Scripts/Dashboard/Modules/DashboardAnalytics.js',
    'public/old/Scripts/Dashboard/Controllers.js',
    'public/old/Scripts/Dashboard/Routes.js',
], 'public/old/Build/Scripts/Dashboard.js');

oldMix.babel([
    'public/old/Scripts/Application/UI.js',
    'public/old/Scripts/Application/Controllers.js',
    'public/old/Scripts/Application/Routes.js',
], 'public/old/Build/Scripts/Application.js');


oldMix.babel([
    'public/old/Scripts/Core.js'
], "public/old/Build/App.js");

oldMix.styles(['public/old/Styles/*.css'], 'public/old/Build/Styles/Core.css');
oldMix.styles(['public/old/Styles/Home/*.css'], 'public/old/Build/Styles/Home.css');
oldMix.styles(['public/old/Styles/Dashboard/*.css'], 'public/old/Build/Styles/Dashboard.css');
oldMix.styles(['public/old/Styles/Application/*.css'], 'public/old/Build/Styles/Application.css');
oldMix.version();
//-- Old Application and Dashboard End --
 

композитор.докерфайл:

 FROM composer:1.6.5

RUN addgroup -g 1000 laravel amp;amp; adduser -G laravel -g laravel -s /bin/sh -D laravel

WORKDIR /var/www/html

CMD ["tail", "-f", "/dev/null"]
 

докер-compose.yml:

 version: '3'

networks:
  laravel:

services:
  application-aws:
    build:
      context: .
      dockerfile: nginx.dockerfile
    container_name: nginx-aws
    ports:
      - 5001:5001
    volumes:
      - ./src:/var/www/html:delegated
    depends_on:
      - php
      - mysql
    links:
      - mysql
    networks:
      - laravel

  mysql:
    image: mysql:5.7.33
    container_name: mysql-aws
    restart: unless-stopped
    tty: true
    ports:
      - 3306:3306
    environment:
      MYSQL_HOST: mysql
      MYSQL_DATABASE: heatable
      MYSQL_USER: heatable
      MYSQL_ROOT_PASSWORD: password
    networks:
      - laravel
    volumes:
      - ./mysql:/var/lib/mysql

  php:
    build:
      context: .
      dockerfile: php.dockerfile
    container_name: php-aws
    volumes:
      - ./src:/var/www/html:delegated
    networks:
      - laravel
    links:
      - mysql
    depends_on:
      - mysql

  composer:
    build:
      context: .
      dockerfile: composer.dockerfile
    container_name: composer-aws
    volumes:
      - ./src:/var/www/html
    working_dir: /var/www/html
    depends_on:
      - php
    user: laravel
    entrypoint: ['composer', '--ignore-platform-reqs']
    networks:
      - laravel

  npm:
    image: node:14.17.1
    tty: true
    container_name: npm-aws
    volumes:
      - ./src:/var/www/html
      - /var/www/html/node_modules
    working_dir: /var/www/html
    entrypoint: ['npm']
    networks:
      - laravel

  artisan:
    build:
      context: .
      dockerfile: php.dockerfile
    container_name: artisan-aws
    volumes:
      - ./src:/var/www/html:delegated
    depends_on:
      - mysql
    working_dir: /var/www/html
    user: laravel
    entrypoint: ['php', '/var/www/html/artisan']
    links:
      - mysql
    networks:
      - laravel
 

файл nginx.dockerfile:

 FROM nginx:stable-alpine

ADD ./nginx/nginx.conf /etc/nginx/nginx.conf
ADD ./nginx/default.conf /etc/nginx/conf.d/default.conf

RUN mkdir -p /var/www/html

RUN addgroup -g 1000 laravel amp;amp; adduser -G laravel -g laravel -s /bin/sh -D laravel

RUN chown laravel:laravel /var/www/html
 

файл npm.dockerfile:

 FROM node:14.17.1
WORKDIR /var/www/html
COPY ./src/package.json .
RUN npm install
 

файл php.dockerfile:

 FROM php:7.3-fpm-alpine

ADD ./php/www.conf /usr/local/etc/php-fpm.d/www.conf

RUN addgroup -g 1000 laravel amp;amp; adduser -G laravel -g laravel -s /bin/sh -D laravel

RUN mkdir -p /var/www/html

RUN chown laravel:laravel /var/www/html

WORKDIR /var/www/html

RUN apk add libpng-dev

RUN docker-php-ext-install mysqli pdo pdo_mysql gd
 

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

1. Вы пробовали удалить какой-либо код, чтобы выяснить, в чем проблема? Я бы начал с удаления плагина purge-css. Вы пробовали отлаживать, чтобы увидеть, где возникает проблема? hackernoon.com/debug-node-js-with-chrome-devtools-aca7cf83af6b

2. Попробуйте найти вариант принудительного смешивания, заменяющего уже существующие изображения.

3. @YaBCK Пожалуйста, не могли бы вы включить в вопрос свой docker-compose.yml файл и свой пользовательский Dockerfile , если вы его используете?

4. @jccampanero — Я включил все файлы докеров в проект и docker-compose.yml

5. Большое вам спасибо за отзыв @YaBCK. Кстати, отличная штука. Я не уверен, но я думаю, что ваша проблема может быть связана с конфигурацией ваших томов. Поведение в wls2 и hyper-v может быть разным. Я бы попробовал две вещи: во-первых, удалить :delegated конфигурацию. Кроме того, поскольку вы активно используете один и тот же том в разных контейнерах, возможно, вы могли бы создать именованный том и повторно использовать этот том в них .