Основной модуль Node.js «fs» не найден, когда @fastify/static развернут на render.com

Насколько я понимаю, основные модули, такие как «fs», являются частью сборки node.js, и никакой специальной настройки не требуется, чтобы сделать их доступными для импорта, поэтому я не понимаю, как «fs» может быть отсутствует при запуске на render.com. У меня нет проблем со сборкой или запуском в режиме разработки локально. И сервис отлично развертывается и строится на render.com, но работает с ошибкой:

      Jan 31 01:13:22 PM  ==> Starting service with 'node index.js'
Jan 31 01:13:23 PM  internal/modules/cjs/loader.js:888
Jan 31 01:13:23 PM    throw err;
Jan 31 01:13:23 PM    ^
Jan 31 01:13:23 PM  
Jan 31 01:13:23 PM  **Error: Cannot find module 'node:fs'**
Jan 31 01:13:23 PM  Require stack:
Jan 31 01:13:23 PM  - /opt/render/project/src/node_modules/@fastify/send/lib/SendStream.js
Jan 31 01:13:23 PM  - /opt/render/project/src/node_modules/@fastify/send/index.js
Jan 31 01:13:23 PM  - /opt/render/project/src/node_modules/@fastify/static/index.js
Jan 31 01:13:23 PM  - /opt/render/project/src/index.js
Jan 31 01:13:23 PM      at Function.Module._resolveFilename (internal/modules/cjs/loader.js:885:15)
Jan 31 01:13:23 PM      at Function.Module._load (internal/modules/cjs/loader.js:730:27)
Jan 31 01:13:23 PM      at Module.require (internal/modules/cjs/loader.js:957:19)
Jan 31 01:13:23 PM      at require (internal/modules/cjs/helpers.js:88:18)
Jan 31 01:13:23 PM      at Object.<anonymous> (/opt/render/project/src/node_modules/@fastify/send/lib/SendStream.js:10:12)
Jan 31 01:13:23 PM      at Module._compile (internal/modules/cjs/loader.js:1068:30)
Jan 31 01:13:23 PM      at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10)
Jan 31 01:13:23 PM      at Module.load (internal/modules/cjs/loader.js:933:32)
Jan 31 01:13:23 PM      at Function.Module._load (internal/modules/cjs/loader.js:774:14)
Jan 31 01:13:23 PM      at Module.require (internal/modules/cjs/loader.js:957:19) {
Jan 31 01:13:23 PM    code: 'MODULE_NOT_FOUND',
Jan 31 01:13:23 PM    requireStack: [
Jan 31 01:13:23 PM      '/opt/render/project/src/node_modules/@fastify/send/lib/SendStream.js',
Jan 31 01:13:23 PM      '/opt/render/project/src/node_modules/@fastify/send/index.js',
Jan 31 01:13:23 PM      '/opt/render/project/src/node_modules/@fastify/static/index.js',
Jan 31 01:13:23 PM      '/opt/render/project/src/index.js'
Jan 31 01:13:23 PM    ]
Jan 31 01:13:23 PM  }

Служба работала весело, пока сегодня я не развернул новую версию, для которой требуется пакет @fastify/static, например:

      fastify.register(require('@fastify/static'), { root: path.join(__dirname,'public'), prefix:'/public/' })

Я никогда не импортирую «fs» напрямую, но, по-видимому, @fastify/static делает это, например:

      const statSync = require('fs').statSync

Я пытался явно импортировать fs перед импортом @fastify, но ошибка не меняется. Webpack не участвует. Я пытался строить с использованием как npm, так и пряжи, без разницы - не то, чтобы сборка затрагивала основные модули. Есть ли какая-то критическая настройка среды, которую я забыл сделать на Render.com?

1 ответ

Комментарий Ронни (спасибо!) заставил меня задуматься, верно ли мое предположение, что «node:fs» совпадает с «fs». Не было. Render.com по умолчанию использует node.js версии 14.17.0. Синтаксис ссылки на модуль «node:» не был добавлен до более поздней версии.

Решение состояло в том, чтобы запросить версию узла 16.0.0 на сайте render.com, используя переменную среды, содержащую строку версии, и это исправило ошибку.

Подробная информация об указании версии на сайте render.com находится по адресу https://render.com/docs/node-version .

Объяснение синтаксиса основных модулей находится по адресу https://nodejs.org/api/modules.html .

Другие вопросы по тегам