React npm carrera construcción sigue fallando

Estoy luchando para construir una aplicación de react usando npm run build. Si uso un archivo docker equivalente y uso npm start funciona bien.

Dockerfile

FROM node:10 as builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
ARG APP_MOUNT_URI
ARG API_URI
ARG STATIC_URL
ENV API_URI ${API_URI:-https://example.org/graphql/}
ENV APP_MOUNT_URI ${APP_MOUNT_URI:-/dashboard/}
ENV STATIC_URL ${STATIC_URL:-/dashboard/}
RUN STATIC_URL=${STATIC_URL} API_URI=${API_URI} APP_MOUNT_URI=${APP_MOUNT_URI} 
RUN npm run build

FROM nginx:stable
WORKDIR /app
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /app/build/ /app/

Tengo el siguiente error:

Child html-webpack-plugin for "index.html":
     1 asset
    Entrypoint undefined = index.html
    [0] ./node_modules/html-webpack-plugin/lib/loader.js!./src/index.html 466 bytes {0} [built]
    [2] (webpack)/buildin/global.js 472 bytes {0} [built]
    [3] (webpack)/buildin/module.js 497 bytes {0} [built]
        + 1 hidden module
npm ERR! code ELIFECYCLE
npm ERR! errno 2
npm ERR! [email protected] build: `webpack -p`
npm ERR! Exit status 2
npm ERR! 
npm ERR! Failed at the [email protected] build 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/2020-12-16T19_48_28_830Z-debug.log
The command '/bin/sh -c npm run build' returned a non-zero code: 2

webpack.config.js

/* eslint-disable @typescript-eslint/no-var-requires */
const path = require("path");
const CheckerPlugin = require("fork-ts-checker-webpack-plugin");
const webpack = require("webpack");
const TsconfigPathsPlugin = require("tsconfig-paths-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");

require("dotenv").config();

const resolve = path.resolve.bind(path, __dirname);

const pathsPlugin = new TsconfigPathsPlugin({
  configFile: "./tsconfig.json"
});

const checkerPlugin = new CheckerPlugin({
  eslint: true,
  reportFiles: ["src/**/*.{ts,tsx}"]
});
const htmlWebpackPlugin = new HtmlWebpackPlugin({
  filename: "index.html",
  hash: true,
  template: "./src/index.html"
});
const environmentPlugin = new webpack.EnvironmentPlugin([
  "APP_MOUNT_URI",
  "API_URI"
]);

const dashboardBuildPath = "build/dashboard/";

module.exports = (env, argv) => {
  const devMode = argv.mode !== "production";

  let fileLoaderPath;
  let output;

  export const API_URI = ""

  if(!process.env.API_URI) {
    throw new Error("Environment variable API_URI not set")
  }

  if (!devMode) {
    const publicPath = process.env.STATIC_URL || "/";
    output = {
      chunkFilename: "[name].[chunkhash].js",
      filename: "[name].[chunkhash].js",
      path: resolve(dashboardBuildPath),
      publicPath
    };
    fileLoaderPath = "file-loader?name=[name].[hash].[ext]";
  } else {
    output = {
      chunkFilename: "[name].js",
      filename: "[name].js",
      path: resolve(dashboardBuildPath),
      publicPath: "/"
    };
    fileLoaderPath = "file-loader?name=[name].[ext]";
  }

  return {
    devServer: {
      compress: true,
      contentBase: path.join(__dirname, dashboardBuildPath),
      historyApiFallback: true,
      hot: true,
      port: 9000
    },
    devtool: "sourceMap",
    entry: {
      dashboard: "./src/index.tsx"
    },
    module: {
      rules: [
        {
          exclude: /node_modules/,
          loader: "babel-loader",
          options: {
            configFile: resolve("./babel.config.js")
          },
          test: /\.(jsx?|tsx?)$/
        },
        {
          include: [
            resolve("node_modules"),
            resolve("assets/fonts"),
            resolve("assets/images"),
            resolve("assets/favicons")
          ],
          loader: fileLoaderPath,
          test: /\.(eot|otf|png|svg|jpg|ttf|woff|woff2)(\?v=[0-9.]+)?$/
        }
      ]
    },
    optimization: {
      removeAvailableModules: false,
      removeEmptyChunks: false,
      splitChunks: false
    },
    output,
    plugins: [checkerPlugin, environmentPlugin, htmlWebpackPlugin],
    resolve: {
      extensions: [".js", ".jsx", ".ts", ".tsx"],
      plugins: [pathsPlugin]
    }
  };
};

Estoy realmente atascado así que realmente apreciaría algo de ayuda.

Pregunta hecha hace 3 años, 5 meses, 1 días - Por rubyrover


2 Respuestas:

  • El error que estás experimentando parece estar relacionado con la configuración de construcción de webpack en tu aplicación de React. Algunas posibles soluciones que puedes intentar son:

    • Verificar que todas las variables de entorno necesarias estén configuradas correctamente antes de ejecutar el comando de construcción en tu Dockerfile.
    • Revisar la configuración de webpack en tu archivo webpack.config.js para asegurarte de que está correctamente configurado para construir tu aplicación de React.
    • Asegurarte de que todas las dependencias y configuraciones necesarias estén instaladas correctamente antes de ejecutar el comando de construcción.
    • Revisar el archivo de registro que se menciona en el error para obtener más información sobre lo que podría estar causando la falla en la construcción.

    Además, es importante tener en cuenta que el error npm ERR! Exit status 2 indica que el proceso de construcción terminó con un código de error, por lo que puede ser útil buscar más detalles en el archivo de registro mencionado.

    Espero que estas sugerencias te ayuden a resolver el problema. ¡Déjame saber si necesitas más ayuda!

    Respondida el Dec 17, 2020 a las 20:07 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Resolución del error "npm run build" de React con Docker

    1. Verificar las dependencias:

    Asegúrate de que todas las dependencias estén instaladas correctamente. Ejecuta npm install en el directorio del proyecto.

    2. Configurar correctamente las variables de entorno:

    En el archivo webpack.config.js, verifica que las variables de entorno API_URI y STATIC_URL estén configuradas correctamente. En el Dockerfile, establece estas variables de entorno antes de ejecutar npm run build.

    3. Modificar la configuración de webpack:

    En webpack.config.js, asegúrate de que la entrada del paquete dashboard apunte al archivo index.tsx correcto. Verifica que la configuración de salida sea correcta para tu caso de uso. En este ejemplo, la ruta de salida está configurada como build/dashboard/, que es donde se compila la aplicación.

    4. Revisar la configuración de Docker:

    Asegúrate de que el Dockerfile esté creando correctamente la imagen de Docker. Verifica que el comando RUN npm run build se esté ejecutando correctamente en el contenedor Docker.

    5. Ejecutar con rutas absolutas:

    Intenta ejecutar el comando npm run build desde la ruta absoluta del proyecto. Esto puede ayudar a evitar problemas de rutas relativas.

    6. Depurar el error de webpack:

    El error mencionado sugiere un problema con el complemento html-webpack-plugin. Intenta eliminar este complemento y reconstruir la aplicación. Si el error persiste, verifica los ajustes de configuración del complemento en webpack.config.js.

    7. Verificar el archivo index.html:

    Asegúrate de que el archivo index.html esté estructurado correctamente y tenga un punto de entrada válido para la aplicación React.

    Consejos adicionales:

    Intenta utilizar una versión diferente de Node.js o webpack. Utiliza herramientas de depuración como debugger o console.log para identificar el origen del error. Compara tu configuración con ejemplos de proyectos de React similares.

    Si sigues teniendo problemas, considera publicar tu código completo en un repositorio de GitHub o GitLab para que otros puedan ayudarte a depurar el problema.

    Respondida el Dec 17, 2020 a las 20:11 - por Gemini

    Votos positivos: 0 | Votos negativos: 0