인프런 커뮤니티 질문&답변

tamo님의 프로필 이미지
tamo

작성한 질문수

프론트엔드 개발환경의 이해와 실습 (webpack, babel, eslint..)

바벨 사용법과 웹팩 통합

TypeError: ((process.env.NODE_ENV === "production") && [MiniCssExtractPlugin]) is not iterable

작성

·

193

2

TypeError: ((process.env.NODE_ENV === "production") && [MiniCssExtractPlugin]) is not iterable

문제 없어보이는데 계속 저 에러가 발생하네요

npm run build 만 입력하면 production이 아니니까 타야할거같은데 환경변수를 집어넣어주면 에러가 발생안하고 안넣어주면 에러가 발생합니다.

 

const path = require("path");

const webpack = require("webpack");
const childProcess = require("child_process");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const isProduction = process.env.NODE_ENV === "production";
module.exports = {
  mode: "development",
  entry: {
    mainSrc: "./app.js",
  },
  output: {
    path: path.resolve("./dist"),
    filename: "[name].js",
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: isProduction
          ? [MiniCssExtractPlugin.loader, "css-loader"]
          : ["style-loader", "css-loader"],
      },
      {
        test: /\.(png|jpg|gif|svg)$/,
        type: "asset/resource",
      },
      {
        test: /\.js$/,
        loader: "babel-loader",
        exclude: "/node_modules/",
      },
    ],
  },
  plugins: [
    new webpack.BannerPlugin({
      banner: `
      Build Date : ${new Date().toLocaleString()}
      Commit Version : ${childProcess.execSync("git rev-parse --short HEAD")}
      Author  : ${childProcess.execSync("git config user.name")}
      `,
    }),
    new webpack.DefinePlugin({
      TWO: "1+1",
      TWO_STRING: JSON.stringify("1+1"),
      "api-domain": JSON.stringify("http://dev.api.domain.com"),
    }),

    new HtmlWebpackPlugin({
      template: "./src/index.html",
      templateParameters: {
        env: process.env.NODE_ENV === "development" ? "개발용" : "운영",
      },
      minify: process.env.NODE_ENV === "production" && {
        collapseWhitespace: true,
        removeComments: true,
      },
    }),

    new CleanWebpackPlugin(),

    ...(process.env.NODE_ENV === "production" && [
      new MiniCssExtractPlugin({
        filename: "[name].css",
      }),
    ]),
  ],
};

 

답변 1

0

김정환님의 프로필 이미지
김정환
지식공유자

코드 맨 아래 플러그인 지정하는 부분에서 발생한 원인이네요.

    ...(process.env.NODE_ENV === "production" && [
      new MiniCssExtractPlugin({
        filename: "[name].css",
      }),
    ]), 

첫 번째 표현식이 false 이기 때문에 전체 문장은 false가 될 겁니다. [...false] 로 평가되어 불리언 타입에 나머지 연산을 시도하다가 TypeError 가 발생했을 것 같아요.

삼항 연산자로 한 번 바꿔보시겠습니까?

    ...(mode === "production"
      ? [new MiniCssExtractPlugin({ filename: `[name].css` })]
      : [])

 

tamo님의 프로필 이미지
tamo

작성한 질문수

질문하기