negezor / vk-io

Modern VK API SDK for Node.js
https://npm.im/vk-io
MIT License
548 stars 85 forks source link

Совместимость с Cloudflare Workers #539

Open AlexXanderGrib opened 1 year ago

AlexXanderGrib commented 1 year ago

Зачем?

Что сделать?

Ошибки сборки


✘ [ERROR] Could not resolve "node:fs"

    node_modules/.store/fetch-blob-npm-3.2.0-28e01becfc/node_modules/fetch-blob/from.js:1:59:
      1 │ import { statSync, createReadStream, promises as fs } from 'node:fs'
        ╵                                                            ~~~~~~~~~

  You can mark the path "node:fs" as external to exclude it from the bundle, which will remove this error.

✘ [ERROR] Could not resolve "node:path"

    node_modules/.store/fetch-blob-npm-3.2.0-28e01becfc/node_modules/fetch-blob/from.js:2:25:
      2 │ import { basename } from 'node:path'
        ╵                          ~~~~~~~~~~~

  You can mark the path "node:path" as external to exclude it from the bundle, which will remove this error.

✘ [ERROR] Could not resolve "node:stream"

    node_modules/.store/node-fetch-npm-3.3.1-576511fc5a/node_modules/node-fetch/src/body.js:8:34:
      8 │ import Stream, {PassThrough} from 'node:stream';
        ╵                                   ~~~~~~~~~~~~~

  You can mark the path "node:stream" as external to exclude it from the bundle, which will remove this error.

✘ [ERROR] Could not resolve "node:util"

    node_modules/.store/node-fetch-npm-3.3.1-576511fc5a/node_modules/node-fetch/src/body.js:9:42:
      9 │ import {types, deprecate, promisify} from 'node:util';
        ╵                                           ~~~~~~~~~~~

  You can mark the path "node:util" as external to exclude it from the bundle, which will remove this error.

✘ [ERROR] Could not resolve "node:buffer"

    node_modules/.store/node-fetch-npm-3.3.1-576511fc5a/node_modules/node-fetch/src/body.js:10:21:
      10 │ import {Buffer} from 'node:buffer';
         ╵                      ~~~~~~~~~~~~~

  You can mark the path "node:buffer" as external to exclude it from the bundle, which will remove this error.

✘ [ERROR] Could not resolve "node:util"

    node_modules/.store/node-fetch-npm-3.3.1-576511fc5a/node_modules/node-fetch/src/headers.js:7:20:
      7 │ import {types} from 'node:util';
        ╵                     ~~~~~~~~~~~

  You can mark the path "node:util" as external to exclude it from the bundle, which will remove this error.

✘ [ERROR] Could not resolve "node:http"

    node_modules/.store/node-fetch-npm-3.3.1-576511fc5a/node_modules/node-fetch/src/headers.js:8:17:
      8 │ import http from 'node:http';
        ╵                  ~~~~~~~~~~~

  You can mark the path "node:http" as external to exclude it from the bundle, which will remove this error.

✘ [ERROR] Could not resolve "node:http"

    node_modules/.store/node-fetch-npm-3.3.1-576511fc5a/node_modules/node-fetch/src/index.js:9:17:
      9 │ import http from 'node:http';
        ╵                  ~~~~~~~~~~~

  You can mark the path "node:http" as external to exclude it from the bundle, which will remove this error.

✘ [ERROR] Could not resolve "node:https"

    node_modules/.store/node-fetch-npm-3.3.1-576511fc5a/node_modules/node-fetch/src/index.js:10:18:
      10 │ import https from 'node:https';
         ╵                   ~~~~~~~~~~~~

  You can mark the path "node:https" as external to exclude it from the bundle, which will remove this error.

✘ [ERROR] Could not resolve "node:zlib"

    node_modules/.store/node-fetch-npm-3.3.1-576511fc5a/node_modules/node-fetch/src/index.js:11:17:
      11 │ import zlib from 'node:zlib';
         ╵                  ~~~~~~~~~~~

  You can mark the path "node:zlib" as external to exclude it from the bundle, which will remove this error.

✘ [ERROR] Could not resolve "node:stream"

    node_modules/.store/node-fetch-npm-3.3.1-576511fc5a/node_modules/node-fetch/src/index.js:12:52:
      12 │ import Stream, {PassThrough, pipeline as pump} from 'node:stream';
         ╵                                                     ~~~~~~~~~~~~~

  You can mark the path "node:stream" as external to exclude it from the bundle, which will remove this error.

✘ [ERROR] Could not resolve "node:buffer"

    node_modules/.store/node-fetch-npm-3.3.1-576511fc5a/node_modules/node-fetch/src/index.js:13:21:
      13 │ import {Buffer} from 'node:buffer';
         ╵                      ~~~~~~~~~~~~~

  You can mark the path "node:buffer" as external to exclude it from the bundle, which will remove this error.

✘ [ERROR] Could not resolve "node:url"

    node_modules/.store/node-fetch-npm-3.3.1-576511fc5a/node_modules/node-fetch/src/request.js:9:34:
      9 │ import {format as formatUrl} from 'node:url';
        ╵                                   ~~~~~~~~~~

  You can mark the path "node:url" as external to exclude it from the bundle, which will remove this error.

✘ [ERROR] Could not resolve "node:util"

    node_modules/.store/node-fetch-npm-3.3.1-576511fc5a/node_modules/node-fetch/src/request.js:10:24:
      10 │ import {deprecate} from 'node:util';
         ╵                         ~~~~~~~~~~~

  You can mark the path "node:util" as external to exclude it from the bundle, which will remove this error.

✘ [ERROR] Could not resolve "node:net"

    node_modules/.store/node-fetch-npm-3.3.1-576511fc5a/node_modules/node-fetch/src/utils/referrer.js:1:19:
      1 │ import {isIP} from 'node:net';
        ╵                    ~~~~~~~~~~

  You can mark the path "node:net" as external to exclude it from the bundle, which will remove this error.

✘ [ERROR] Build failed with 15 errors:

  node_modules/.store/fetch-blob-npm-3.2.0-28e01becfc/node_modules/fetch-blob/from.js:1:59: ERROR:
  Could not resolve "node:fs"
  node_modules/.store/fetch-blob-npm-3.2.0-28e01becfc/node_modules/fetch-blob/from.js:2:25: ERROR:
  Could not resolve "node:path"
  node_modules/.store/node-fetch-npm-3.3.1-576511fc5a/node_modules/node-fetch/src/body.js:8:34:
  ERROR: Could not resolve "node:stream"
  node_modules/.store/node-fetch-npm-3.3.1-576511fc5a/node_modules/node-fetch/src/body.js:9:42:
  ERROR: Could not resolve "node:util"
  node_modules/.store/node-fetch-npm-3.3.1-576511fc5a/node_modules/node-fetch/src/body.js:10:21:
  ERROR: Could not resolve "node:buffer"
  ...

negezor commented 1 year ago

В мажорной версии есть планы отказаться от node-fetch в сторону нативного fetch. Однако built-in зависимости импортов node.js никуда не денется.

AlexXanderGrib commented 1 year ago

Как я понял, флаг node_compat = true позвляет использовать модуль vk-io без изменений. Все ошибки, как вы могли видеть, исходят из модуля node-fetch

Идеальным вариантом было бы выделение всего API, Updates, Uploads, а также транспортов Webhook и Polling в отдельные модули (импорты), например:

Это позволит не импортировать апи ноды в API и Updates

negezor commented 1 year ago

Это потребует много работы, так как они напрямую завязаны на этом Node API. Так как зависимость будет уже непосредственно в под-пакетах. За примером далеко ходить не нужно, inspectable требует node:util, а это используется во всех контекстах и прикреплениях.