평범한 개발자 행복한 가족, 패밀리그램

개발/React

jszip is not a constructor !!!

패밀리그램 2023. 10. 27. 13:35

jszip is not a constructor

react-scripts 를 5로 업데이트하고 발생하는 문제. 사용하는 라이브러리에서 발생하는 문제인데, 원인을 파악해 보니 이렇다.

tempa-xlsx의 xlsx.js

...
var _fs, jszip;
if(typeof JSZip !== 'undefined') jszip = JSZip;
if (typeof exports !== 'undefined') {
    if (typeof module !== 'undefined' && module.exports) {
        if(has_buf && typeof jszip === 'undefined') jszip = require('js'+'zip');
        if(typeof jszip === 'undefined') jszip = require('./js'+'zip').JSZip;
        _fs = require('f'+'s');
    }
}
...

해당 라이브러리에 위치 ./jszip.js 에 jszip 을 내장하여 사용하고 있는데 해당 파일을 참조할 수 없어서 발생하는 문제였다

 

해결방법

webpack config 를 업데이트 해줘야하는데, react-app-rewired 를 사용하고 있으니, 이걸 이용하여 업데이트해보자

2023.10.26 - [개발/React] - React Scripts 4.x -> 5.x 마이그레이션

 

React Scripts 4.x -> 5.x 마이그레이션

React CSR 프로젝트를 사용한다면 CSR 프로젝트에서 react-scripts 4.x 버전에서 5.x 버전으로 마이그래이션 시 엄청난 빌드에러가 발생한다. 가장 대표적인 빌드에러가 webpack 5 관련 에러이다. 구글링해

family-gram.tistory.com

 

config-overrides.js 
const webpack = require("webpack");

module.exports = function override(config, env) {
	...
    const plugins = config.plugins || [];
    ...
    plugins.push(new webpack.ProvidePlugin({ JSZip: "jszip" }));
...

webpack config의 plugins 에 ProvidePlugin 으로 JSZip 을 추가해준다.

 

 

해결됨
반응형