SabakiHQ / Sabaki

An elegant Go board and SGF editor for a more civilized age.
https://sabaki.yichuanshen.de/
MIT License
2.39k stars 375 forks source link

Upgrade to Shudan 1.7.x #883

Closed apetresc closed 2 years ago

apetresc commented 2 years ago

This required an upgrade from Webpack 4 to Webpack 5 because Shudan 1.7.0 makes use of the nullish coalescing operator '??' which Webpack 4 fails to parse. Luckily, this was a pretty painless migration.

Closes #882.

apetresc commented 2 years ago

Hmm, so webpack --mode production was working fine with Shudan 1.7.0 last night, but something in Shudan 1.7.1 this morning has broken it again. Needs investigation.

apetresc commented 2 years ago

@yishn Do you have any insight here? It seems there's some sort of incompatibility with how imports are resolved. Ever since SabakiHQ/Shudan@966c924b4629261667e5710f105e5d46ac949d81 Sabaki is translating's Shudan's require("preact/hooks") into a search path of [..]/node_modules/preact/dist/preact.min.js/hooks[.js|.json|.wasm] which clearly seems wrong. I'm not fluent enough in all the new Node/ES/Webpack churn to make sense of which component's fault this is, do you have an idea off the top of your head?

Relevant stack trace:

ERROR in ./node_modules/@sabaki/shudan/src/Vertex.js 2:0-43
Module not found: Error: Can't resolve 'preact/hooks' in '/home/apetresc/src/personal/sabaki/Sabaki/node_modules/@sabaki/shudan/src'
resolve 'preact/hooks' in '/home/apetresc/src/personal/sabaki/Sabaki/node_modules/@sabaki/shudan/src'
  Parsed request is a module
  using description file: /home/apetresc/src/personal/sabaki/Sabaki/node_modules/@sabaki/shudan/package.json (relative path: ./src)
    aliased with mapping 'preact': '/home/apetresc/src/personal/sabaki/Sabaki/node_modules/preact/dist/preact.min.js' to '/home/apetresc/src/personal/sabaki/Sabaki/node_modules/preact/dist/preact.min.js/hooks'
      using description file: /home/apetresc/src/personal/sabaki/Sabaki/node_modules/@sabaki/shudan/package.json (relative path: ./src)
        Field 'browser' doesn't contain a valid alias configuration
        root path /home/apetresc/src/personal/sabaki/Sabaki
          using description file: /home/apetresc/src/personal/sabaki/Sabaki/package.json (relative path: ./home/apetresc/src/personal/sabaki/Sabaki/node_modules/preact/dist/preact.min.js/hooks)
            no extension
              Field 'browser' doesn't contain a valid alias configuration
              /home/apetresc/src/personal/sabaki/Sabaki/home/apetresc/src/personal/sabaki/Sabaki/node_modules/preact/dist/preact.min.js/hooks doesn't exist
            .js
              Field 'browser' doesn't contain a valid alias configuration
              /home/apetresc/src/personal/sabaki/Sabaki/home/apetresc/src/personal/sabaki/Sabaki/node_modules/preact/dist/preact.min.js/hooks.js doesn't exist
            .json
              Field 'browser' doesn't contain a valid alias configuration
              /home/apetresc/src/personal/sabaki/Sabaki/home/apetresc/src/personal/sabaki/Sabaki/node_modules/preact/dist/preact.min.js/hooks.json doesn't exist
            .wasm
              Field 'browser' doesn't contain a valid alias configuration
              /home/apetresc/src/personal/sabaki/Sabaki/home/apetresc/src/personal/sabaki/Sabaki/node_modules/preact/dist/preact.min.js/hooks.wasm doesn't exist
            as directory
              /home/apetresc/src/personal/sabaki/Sabaki/home/apetresc/src/personal/sabaki/Sabaki/node_modules/preact/dist/preact.min.js/hooks doesn't exist
        using description file: /home/apetresc/src/personal/sabaki/Sabaki/node_modules/preact/package.json (relative path: ./dist/preact.min.js/hooks)
          no extension
            Field 'browser' doesn't contain a valid alias configuration
            /home/apetresc/src/personal/sabaki/Sabaki/node_modules/preact/dist/preact.min.js/hooks doesn't exist
          .js
            Field 'browser' doesn't contain a valid alias configuration
            /home/apetresc/src/personal/sabaki/Sabaki/node_modules/preact/dist/preact.min.js/hooks.js doesn't exist
          .json
            Field 'browser' doesn't contain a valid alias configuration
            /home/apetresc/src/personal/sabaki/Sabaki/node_modules/preact/dist/preact.min.js/hooks.json doesn't exist
          .wasm
            Field 'browser' doesn't contain a valid alias configuration
            /home/apetresc/src/personal/sabaki/Sabaki/node_modules/preact/dist/preact.min.js/hooks.wasm doesn't exist
          as directory
            /home/apetresc/src/personal/sabaki/Sabaki/node_modules/preact/dist/preact.min.js/hooks doesn't exist
 @ ./node_modules/@sabaki/shudan/src/Goban.js 16:0-33 158:16-22
 @ ./node_modules/@sabaki/shudan/src/main.js 1:0-31 4:0-31
 @ ./src/components/Goban.js 5:0-43 451:13-25
 @ ./src/components/MainView.js 3:0-30 134:10-15
 @ ./src/components/App.js 12:0-36 362:23-31

webpack 5.74.0 compiled with 1 error in 8222 ms
yishn commented 2 years ago

I have removed the "preact" alias in webpack.config.js and it seems to be working now

apetresc commented 2 years ago

Indeed, not sure how I missed that :) Though I wish I understood what it was about "type": "module" (presumably) that changes the way the import path is generated.

Thanks @yishn!

yishn commented 2 years ago

I think the reason was the introduction of a preact/hooks Import that did not exist before 😅