Lighthouse of FE biginner

[트러블슈팅] Vite 프로젝트 Node.js 환경 폴리필 본문

[WEB] 프론트엔드

[트러블슈팅] Vite 프로젝트 Node.js 환경 폴리필

[FE] Lighthouse 2024. 7. 2. 12:30

https://stackoverflow.com/questions/70714690/buffer-is-not-defined-in-react-vite

mqtt.js?v=9e3ec9d5:10220 
Uncaught (in promise) ReferenceError: Buffer is not defined
    at node_modules/.pnpm/mqtt-packet@6.10.0/node_modules/mqtt-packet/constants.js (mqtt.js?v=9e3ec9d5:10220:38)
    at __require2 (chunk-AUZ3RYOM.js?v=dd0eb698:18:50)
    at node_modules/.pnpm/mqtt-packet@6.10.0/node_modules/mqtt-packet/parser.js (mqtt.js?v=9e3ec9d5:10352:21)
    at __require2 (chunk-AUZ3RYOM.js?v=dd0eb698:18:50)
    at node_modules/.pnpm/mqtt-packet@6.10.0/node_modules/mqtt-packet/mqtt.js (mqtt.js?v=9e3ec9d5:11974:22)
    at __require2 (chunk-AUZ3RYOM.js?v=dd0eb698:18:50)
    at node_modules/.pnpm/mqtt@4.3.8_bufferutil@4.0.8_utf-8-validate@5.0.10/node_modules/mqtt/lib/client.js (mqtt.js?v=9e3ec9d5:12320:22)
    at __require2 (chunk-AUZ3RYOM.js?v=dd0eb698:18:50)
    at node_modules/.pnpm/mqtt@4.3.8_bufferutil@4.0.8_utf-8-validate@5.0.10/node_modules/mqtt/lib/connect/index.js (mqtt.js?v=9e3ec9d5:15476:22)
    at __require2 (chunk-AUZ3RYOM.js?v=dd0eb698:18:50)

 

Webpack4 에서는 node.js 환경에서 사용되는 라이브러리가 자동으로 폴리필이 되었지만 Vite에서는 node 환경의 라이브러리를 사용하려면 수동으로 폴리필을 추가해줘야 합니다. (Webpack5 에서도 수동으로 변경)

아래 라이브러리를 설치해줍니다.

@esbuild-plugins/node-globals-polyfill

vite.config.ts 에 아래 설정을 넣어줍니다.

    optimizeDeps: {
      esbuildOptions: {
         // Node.js global to browser globalThis
         define: {
            global: 'globalThis',
         },
         // Enable esbuild polyfill plugins
         plugins: [
            NodeGlobalsPolyfillPlugin({
               buffer: true,
            }),
         ],
      },
   },