visgl / deck.gl

WebGL2 powered visualization framework
https://deck.gl
MIT License
12.2k stars 2.09k forks source link

[Bug] Critical dependency: the request of a dependency is an expression | Next.js13 #7617

Closed ander481 closed 1 year ago

ander481 commented 1 year ago

Description

I'm having a warning with running a simple example of Deck.GL in the new Next.js 13 react framework. I recently found a person with the same issue on StackOverflow

Flavors

Expected Behavior

No response

Steps to Reproduce

Here is my /src/app/index.tsx

'use client'

import React, { useState } from 'react';
// @ts-ignore
import DeckGL from '@deck.gl/react/typed';

// Map components

//import getViewState from './view'
//import layers from './layers';

// @ts-ignore
import {TileLayer} from '@deck.gl/geo-layers';
// @ts-ignore
import {BitmapLayer} from '@deck.gl/layers';

// Styles
import styles from './style.module.scss';

export default function Home({ viewState }) {
  const layer = new TileLayer({
    // https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Tile_servers
    data: "https://c.tile.openstreetmap.org/{z}/{x}/{y}.png",

    minZoom: 0,
    maxZoom: 19,
    tileSize: 256,

    renderSubLayers: (props) => {
      const {
        bbox: { west, south, east, north },
      } = props.tile;

      return new BitmapLayer(props, {
        data: null,
        image: props.data,
        bounds: [west, south, east, north],
      });
    },
  });

  return (
    <main>
      <DeckGL
        initialViewState={{
          longitude: -122.45,
          latitude: 37.78,
          zoom: 12,
        }}
        controller={true}
        layers={[layer]}
      />
    </main>
  );
}

export default Home;

Environment

Logs

warn - ./node_modules/@loaders.gl/worker-utils/dist/es5/lib/node/require-utils.node.js Critical dependency: the request of a dependency is an expression

Import trace for requested module: ./node_modules/@loaders.gl/worker-utils/dist/es5/lib/node/require-utils.node.js ./node_modules/@loaders.gl/worker-utils/dist/es5/lib/library-utils/library-utils.js ./node_modules/@loaders.gl/worker-utils/dist/es5/index.js ./node_modules/@loaders.gl/core/dist/es5/lib/api/parse.js ./node_modules/@loaders.gl/core/dist/es5/index.js ./node_modules/@deck.gl/geo-layers/dist/es5/tile-3d-layer/tile-3d-layer.js ./node_modules/@deck.gl/geo-layers/dist/es5/index.js ./src/app/(map)/index.tsx

ibgreen commented 1 year ago

@ander481 this looks like a loaders.gl bundling issue. You are welcome to report it in loaders.gl.

Opening a PR with a minimal Next.js example that repros it (e.g. above source code + pacakage.json) would help immensely to motivate work on a resolution.

ander481 commented 1 year ago

Thank you! Solved the issue in the next way by downgrading loader package:

https://stackoverflow.com/questions/74991964/critical-dependency-the-request-of-a-dependency-is-an-expression-for-loader-gl

davidcalhoun commented 1 year ago

We've unfortunately also been getting this issue for quite a long time on my team. There's another workaround documented here which involves tweaking the Next.js config: https://github.com/Thopiax/batch11_e_cartomobile_ui/blob/18b955287fa7b36f6dc8a6f450232ae98c77709a/next.config.js#L19