Next.js: `next build` завершается ошибкой" Модуль не саморегистрируется ".

Созданный на 11 июл. 2019  ·  55Комментарии  ·  Источник: vercel/next.js

Сообщение об ошибке

Опишите ошибку

next build выдает следующую ошибку после обновления до Next 9.

{ Error: Module did not self-register.
    at Object.Module._extensions..node (internal/modules/cjs/loader.js:857:18)
    at Module.load (internal/modules/cjs/loader.js:685:32)
    at Function.Module._load (internal/modules/cjs/loader.js:620:12)
    at Module.require (internal/modules/cjs/loader.js:723:19)
    at require (internal/modules/cjs/helpers.js:14:16)
    at Object.<anonymous> (/home/vista1nik/Documents/nextjs-project/node_modules/grpc/src/grpc_extension.js:32:13)
    at Module._compile (internal/modules/cjs/loader.js:816:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:827:10)
    at Module.load (internal/modules/cjs/loader.js:685:32)
    at Function.Module._load (internal/modules/cjs/loader.js:620:12) type: 'Error', '$error': '$error' }

Ошибка происходит после компиляции.
Триггер последней сборки перед ошибкой:
https://github.com/zeit/next.js/blob/5a54e8715a7a7a92175addc19f4ec9f8f7bbd2e7/packages/next/build/index.ts#L342

Воспроизводить

https://github.com/jpbow/module-register-build-issue

Ожидаемое поведение

next build успех

Системная информация

  • ОС: Arch Linux
  • Версия Next.js: 9.0.0

Дополнительный контекст

Пробовал yarn install --force и Clean зависит от установки.

next . dev-команда работает правильно.

Самый полезный комментарий

У меня такое ощущение, что это вызвано недавно добавленным отчетом о сборке. Поскольку ошибка возникает после завершения сборки

Creating an optimized production build ...

> Using external babel configuration
> Location: "/app/.babelrc"
Compiled successfully.

Warning: You have opted-out of Automatic Prerendering due to `getInitialProps` in `pages/_app`.
Read more: https://err.sh/next.js/opt-out-automatic-prerendering

> Build error occurred
{ Error: Module did not self-register.
    at Object.Module._extensions..node (internal/modules/cjs/loader.js:730:18)
    at Module.load (internal/modules/cjs/loader.js:600:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
    at Function.Module._load (internal/modules/cjs/loader.js:531:3)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)
    at Object.<anonymous> (/app/node_modules/@firebase/firestore/node_modules/grpc/src/grpc_extension.js:32:13)
    at Module._compile (internal/modules/cjs/loader.js:701:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32) type: 'Error', '$error': '$error' }
error Command failed with exit code 1.

Все 55 Комментарий

Пожалуйста, предоставьте полную репродукцию

Завтра сделаю репродукцию. Сегодня у меня нет доступа к моему компьютеру.

Закройте, потому что это проблема firebase grpc.

Аналогичная проблема есть в # 7821

Закройте, потому что это проблема firebase grpc.

Как я могу это исправить?
У меня такая же проблема

@ go-rani В настоящее время у меня нет решения, потому что я не совсем уверен, что эта проблема принадлежит firebase. Я пытаюсь воспроизвести эту ошибку в примере проекта.

У меня точно такая же проблема. При переходе на v8 все идет нормально
вот изображение, которое я использую:
gcr.io/google_appengine/nodejs

@vbilici интересно ...

У меня такое ощущение, что это вызвано недавно добавленным отчетом о сборке. Поскольку ошибка возникает после завершения сборки

Creating an optimized production build ...

> Using external babel configuration
> Location: "/app/.babelrc"
Compiled successfully.

Warning: You have opted-out of Automatic Prerendering due to `getInitialProps` in `pages/_app`.
Read more: https://err.sh/next.js/opt-out-automatic-prerendering

> Build error occurred
{ Error: Module did not self-register.
    at Object.Module._extensions..node (internal/modules/cjs/loader.js:730:18)
    at Module.load (internal/modules/cjs/loader.js:600:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
    at Function.Module._load (internal/modules/cjs/loader.js:531:3)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)
    at Object.<anonymous> (/app/node_modules/@firebase/firestore/node_modules/grpc/src/grpc_extension.js:32:13)
    at Module._compile (internal/modules/cjs/loader.js:701:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32) type: 'Error', '$error': '$error' }
error Command failed with exit code 1.

У меня такая же проблема.

Но когда я закомментировал «import firebase / firestore», этой проблемы не произошло.

import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/functions';
import 'firebase/database';
// import 'firebase/firestore'; <-- 

Но мне нужен firebase / firestore. это не решение.

Насколько я понимаю, какая-либо зависимость от grpc нарушает сборку nextjs?

Получил и эту проблему.

Сначала я мог создавать, но это случается, когда мои страницы / страницы разрастаются. Я попытался вернуться к старой фиксации, где я могу построить без проблем и продублировать мою папку / pages (-v1, -v2 и т. Д.) После сборки до точки, где она не удалась.

Я не мог количественно оценить, насколько «большой» большой, но надеюсь, что это поможет.

@timneutkens @ Vista1nik Я создал репродукцию здесь https://github.com/jpbow/module-register-build-issue

@jpbow Спасибо за реподукцию, добавленную в выпуск.

просто вмешиваюсь, это также не удается при развертывании с помощью now 2.0

Похоже, что NextJS 9 несовместим с зависимостями, которые так или иначе используют GRPC.
В настоящее время я пытаюсь найти любой другой пакет, который использует GRPC, чтобы подтвердить это.

@ Vista1nik он потерпит неудачу как с firebase, так и с gcp. Оба используют grpc.

после обновления моего next.config.js следующим (как указано в # 6073)

 webpack(config, options) {
    if (process.env.NODE_ENV !== "development") {
      config.externals = {
        grpc: "grpc"
      };
    }
    return config;
  }

ссылка: https://github.com/zeit/next.js/issues/6073#issuecomment -498025104

Моя ошибка развертывания изменилась, я не думаю, что это оптимально, но может быть временным решением для тех, кто пытается обновить производственные сборки.

новая ошибка, похоже, связана с панелью инструментов AMP,

running "yarn run now-build"
Jul 22 2019 14:05:48:345 | ...next.config.js | yarn run v1.16.0
Jul 22 2019 14:05:48:403 | ...next.config.js | $ next build
Jul 22 2019 14:05:49:159 | ...next.config.js | Creating an optimized production build ...
Jul 22 2019 14:05:49:824 | ...next.config.js | > Using external babel configuration
Jul 22 2019 14:05:49:824 | ...next.config.js | > Location: "/tmp/bc0fa1c/babel.config.js"
Jul 22 2019 14:07:52:235 | ...next.config.js | Failed to compile.
Jul 22 2019 14:07:52:235 | ...next.config.js | ./node_modules/amp-toolbox-optimizer/lib/transformers/AddBlurryImagePlaceholders.js
Jul 22 2019 14:07:52:235 | ...next.config.js | Module not found: Can't resolve 'jimp' in '/tmp/bc0fa1c/node_modules/amp-toolbox-optimizer/lib/transformers'
Jul 22 2019 14:07:52:235 | ...next.config.js |  

что раздражает, поскольку я вообще не использую AMP, не знаю, насколько это связано, но, надеюсь, это полезно.

У меня такая же проблема с использованием firebase. Кто-нибудь нашел обходной путь развертывания?

По какой-то причине при сборке моего проекта в mac OS _works_, а в Debian я получаю ту же ошибку «Модуль не саморегистрируется».

Кто-нибудь нашел способ решения этой проблемы?

Наверное, шутка про «Купи новый Mac».
В настоящее время решением является только переход на более раннюю версию.

проверено и # 8290 исправляет. Когда выйдет релиз канарейки, в котором он будет содержаться?

Привет @getorca , исправление должно быть в v9.0.4-canary.3 которое сейчас

Это изменение выпущено как [email protected] . Вы можете обновить свои приложения!

похоже, что это регрессировало в 9.0.6 . переход на 9.0.5 или 9.0.4 прежнему выполняется правильно. с 9.0.6 я получаю ту же ошибку о grpc

@ebemunk, пожалуйста, предоставьте четкое и краткое изображение, на которое мы можем взглянуть. Сообщение «В моем случае не работает» не решит вашу проблему.

спасибо, что посмотрели @timneutkens , извиняюсь, я не предоставил шаг воспроизведения, так как проблема точно такая же, как и уже сообщенная, и предыдущие шаги воспроизведения все еще действительны.
вот минимальный пример с использованием https://github.com/jpbow/module-register-build-issue , созданного @jpbow .

git clone https://github.com/jpbow/module-register-build-issue.git
cd module-register-build-issue
yarn add [email protected]
yarn build

Вы получаете ту же ошибку, что и в предыдущих комментариях:

Creating an optimized production build .Automatically opError: Failed to load /xxxxx/module-register-build-issue/node_modules/grpc/src/node/extension_binary/node-v72-darwin-x64-unknown/grpc_node.node. Module did not self-register.

Чтобы понять, почему это регресс, я сделал

yarn add [email protected]
yarn build

Как и ожидалось, все получилось. Пробуем версию, в которой эта проблема была исправлена:

yarn add [email protected]
yarn build

Успех снова. Пробуем версию до того, как это исправление приземлилось:

yarn add [email protected]
yarn build

Ошибка с тем же сообщением выше.

Критическая строка выглядит так: import "firebase/firestore"; . Если эту строку удалить, то ошибки grpc не наблюдается.

Надеюсь, что это поможет прояснить ситуацию.

Я также внезапно получал эту ошибку после десятков успешных сборок, но похоже, что обновление до 9.0.6 исправило ее.

С 9.1.1 и firestore все еще есть эта проблема.

РЕДАКТИРОВАТЬ: переход на 9.0.5

С 9.1.1 и firestore все еще есть эта проблема.

переход на 9.0.4 или 9.0.5 исправить ...

Error occurred prerendering /services: Error: Failed to load /Users/me/myproject/node_modules/grpc/src/node/extension_binary/node-v67-darwin-x64-unknown/grpc_node.node. Module did not self-register. at Object.Module._extensions..node (internal/modules/cjs/loader.js:775:18) at Module.load (internal/modules/cjs/loader.js:626:32) at tryModuleLoad (internal/modules/cjs/loader.js:566:12) at Function.Module._load (internal/modules/cjs/loader.js:558:3) at Module.require (internal/modules/cjs/loader.js:663:17) at require (internal/modules/cjs/helpers.js:20:18) at Object.<anonymous> (/Users/me/myproject/node_modules/grpc/src/grpc_extension.js:32:13) at Module._compile (internal/modules/cjs/loader.js:734:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:745:10) at Module.load (internal/modules/cjs/loader.js:626:32)

Эта ошибка произошла для каждой страницы

fwiw на самом деле это не проблема Next.js. Похоже, что grpc не работает на определенных версиях Node.js. Я столкнулся с этим на днях с узлом 12, и он отлично работает на узле 10.

@timneutkens
Но что использовать Next в версиях выше 9.0.5, которые вызывают сбой?
Я использую ту же версию Node (11.9.0), я просто переключаю версию Next и получаю проблему, когда она выше 9.0.5. Я согласен с тем, что эта проблема вызвана grpc но можем ли мы в конечном итоге изолировать связь между Следующими изменениями в 9.0.6 и grpc, чтобы найти обходной путь?

Но что использовать Next в версиях выше 9.0.5, которые вызывают сбой?

Не стесняйтесь исследовать, что вызвало проблемы.

Работа над 9.0.6-canary.0

Вылет на 9.0.6-canary.1

Я больше имел в виду исследовать, как на самом деле выяснить проблему 🚀

Я сделал git bisect и определил https://github.com/zeit/next.js/commit/f81b6d56e03d3f883e8c5faebae44208bd1a328b как первый коммит, который нарушает next build в сочетании с firebase / grpc.

Я предполагаю, что это связано с https://github.com/grpc/grpc-node/issues/778.

Я был бы рад помочь с этим, но в настоящее время я немного не понимаю, как может выглядеть правильное решение.

Есть идеи @ijjk , @Timer , @timneutkens?

Я тестирую каждый патч на 9.0.6-canary.1, и ошибка возникает на: 61b8b73

Я продолжу исследование завтра, но на самом деле отмечу, что в строке 117 в worker.js
const components = await loadComponents( distDir, buildId, page, serverless )

потерпел неудачу, а затем

catch (error) { console.error( \ nОшибка при предварительной визуализации $ {path}: , error) return { ...results, error: true } } }

@notiles, это интересно. Я сделал git bisect между v9.0.5 и v9.0.6-canary.1 и обнаружил, что первая неудачная фиксация была https://github.com/zeit/next.js/commit/f81b6d56e03d3f883e8c5faebae44208bd1a328b.

Хотя коммит, о котором вы говорите (https://github.com/zeit/next.js/commit/61b8b7323e089c8cc0372ce0f32402c8d70096f8), определенно не работает для меня, коммит перед этим (https://github.com/zeit/next .js / commit / 110c83fa443a7a557a82dc49968dee56e293680c) у меня тоже не работает.

Не могли бы вы попробовать это с https://github.com/zeit/next.js/commit/f81b6d56e03d3f883e8c5faebae44208bd1a328b и посмотреть, работает ли это для вас?

@ctavan Доброе утро! На моей стороне f81b6d5 работает, моя сборка прошла успешно.

Я нахожу, где происходит сбой, но дальше идти не могу:

в пакетах / next / next-server / server / load-components.ts
строка 70: ​​ошибка interopDefault (require (appPath)).

appPath выглядит хорошо: /Users/me/myproject/.next/server/static/eUfibox1CSt3iNdo6twQi/pages/_app

@notiles, это действительно очень странно! Какую версию узла и операционную систему вы используете?

Вот подробные инструкции по воспроизведению надежного воспроизведения проблемы на моем компьютере. Хотели бы вы также попробовать их и сообщить, действительно ли они подходят для вас, с https://github.com/zeit/next.js/commit/f81b6d56e03d3f883e8c5faebae44208bd1a328b ?

# MacOS 10.14.6 (18G103)
#
node --version
# v12.12.0

# Steps to reproduce:
git clone https://github.com/zeit/next.js.git
cd next.js

# Check out the last working commit:
git checkout 2c7b4d8a

# Build local next module:
yarn

# Demonstrate the issue using the included example:
cd examples/with-firebase-authentication

# Use local next module:
sed -i '' -e "s#\"next\": \"latest\"#\"next\": \"file:$(pwd)/../../packages/next\"#" package.json

# Upgrade firebase modules because the ones defined in package.json won't build
# with node 12:
yarn add [email protected] [email protected]

# Duplicate the single page from the example to provoke a parallel build. The
# issue only appears when multiple pages are built in parallel:
cp pages/index.js pages/parallel.js

# Ensure there's no local installation of next, then force install the example
# and try to build it:
rm -rf node_modules/next && yarn install --force && yarn build

# yarn run v1.19.1
# warning package.json: No license field
# $ next build
# Creating an optimized production build ...
#
# Compiled successfully.
#
# Page            Size     Files  Packages
# ┌ σ /           3.23 kB      1         7
# ├   /_app       1.83 kB      0         7
# ├   /_document
# ├   /_error     7.71 kB      0         7
# └ σ /parallel   3.24 kB      1         7
#
# σ  (Server)       page will be server rendered (i.e. getInitialProps)
# ⚡  (Static File)  page was prerendered as static HTML
#
# ✨  Done in 19.53s.

# Now back to the repository root and checkout the first broken commit:
cd ../../
git checkout f81b6d5

# Build the local next module again:
yarn

# Try to build the example again:
cd examples/with-firebase-authentication
rm -rf node_modules/next && yarn install --force && yarn build

# yarn run v1.19.1
# warning package.json: No license field
# $ next build
# Creating an optimized production build ...
#
# Compiled successfully.
#
# > Build error occurred
# Error: Failed to load /Users/*REDACTED*/next.js/examples/with-firebase-authentication/node_modules/grpc/src/node/extension_binary/node-v72-darwin-x64-unknown/grpc_node.node. Module did not self-register.
#     at Object.Module._extensions..node (internal/modules/cjs/loader.js:1003:18)
#     at Module.load (internal/modules/cjs/loader.js:812:32)
#     at Function.Module._load (internal/modules/cjs/loader.js:724:14)
#     at Module.require (internal/modules/cjs/loader.js:849:19)
#     at require (internal/modules/cjs/helpers.js:74:18)
#     at Object.<anonymous> (/Users/*REDACTED*/next.js/examples/with-firebase-authentication/node_modules/grpc/src/grpc_extension.js:32:13)
#     at Module._compile (internal/modules/cjs/loader.js:956:30)
#     at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)
#     at Module.load (internal/modules/cjs/loader.js:812:32)
#     at Function.Module._load (internal/modules/cjs/loader.js:724:14) {
#   type: 'Error'
# }
# error Command failed with exit code 1.
# info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Я тоже использую Mac OS 10.14.6, но я нахожусь на узле 11.9.0. Я постараюсь сказать вам, смогу ли я построить

Как и вы, он вылетает с f81b6d5.

В своем проекте я использую

"react-redux-firebase": "^ 2.4.1",
"redux-firestore": "^ 0.9.0",
"firebase": "^ 7.1.0",

Я обновляю свою firebase до 7.2.1 и пробую с 61b8b73, и сборка завершается успешно ... действительно странно

Попробуйте удалить этот импорт: import "firebase / firestore"; только в index.js

@notiles, если вы удалите один из двух импортированных firebase/firestore то вы больше не провоцируете параллельную сборку двух модулей, требующих grpc .

Как упоминалось выше, я почти уверен, что проблема, которую мы здесь наблюдаем, вызвана https://github.com/grpc/grpc-node/issues/778, в котором указано, что grpc "не поддерживает несколько потоков. ".

В качестве обходного пути я выяснил, что сборки успешны со следующими next.config.js :

module.exports = {
  experimental: {
    cpus: 1,
  },
};

и выйдет из строя, как только вы увеличите количество ЦП (что еще раз доказывает, что параллельное выполнение рабочих процессов является основной причиной). Очевидно, что сборки больше не будут использовать преимущества нескольких рабочих потоков, так что это обходной путь, а не решение.

@ijjk , @Timer , @timneutkens извините за то, что снова вас

Понятно @ctavan ! Большое спасибо за это объяснение. К сожалению, у меня все еще есть проблема с экспериментальным: {
процессор: 1,
}

` Предупреждение: вы включили экспериментальные функции.Экспериментальные функции не охватываются семвером и могут вызывать неожиданное или нарушенное поведение приложения.

Использование внешней конфигурации babel
Расположение: "/Users/me/myproject/.babelrc"
Создание оптимизированной производственной сборки

Скомпилировано успешно.

Автоматическая оптимизация страниц ..
Произошла ошибка предварительной визуализации / загрузки / [document_id]: Ошибка: не удалось загрузить /Users/me/myproject/node_modules/grpc/src/node/extension_binary/node-v72-darwin-x64-unknown/grpc_node.node. Модуль не прошел саморегистрацию.

и т.д ... `

Я безуспешно переключаю с узла 11.9.0 на узел 10.12 и с узла 13.0.1 на узел 12.13.0 ...

Я был слишком быстр. С next.config.js из моего предыдущего комментария сборка действительно работала для https://github.com/zeit/next.js/commit/f81b6d56e03d3f883e8c5faebae44208bd1a328b, но не с [email protected] потому что https: // github. com / zeit / next.js / commit / 61b8b7323e089c8cc0372ce0f32402c8d70096f8 ввел jest-worker в next export который вызывается как часть этапа сборки.

Моя первоначальная идея заключалась в том, чтобы передать config.experimental.cpus работнику экспорта, однако мне это не удалось. Даже при установке numWorkers: 1 шаг экспорта в сборке завершится ошибкой Module did not self-register. .

Единственный способ заставить его работать для моего варианта использования - это установить enableWorkerThreads: false в:

https://github.com/zeit/next.js/blob/a964dc825ecea1e35fb460184828974e00b7d6d6/packages/next/export/index.ts#L265 -L273

Возможный обходной путь может заключаться в том, чтобы разрешить установку config.experimental.cpus: 0 и, как следствие, полное отключение рабочих потоков. Вскоре я отправлю запрос на включение этого предложения.

Хорошо @ctavan ! Это абсолютно верно, я изменяю enableWorkerThreads на false и собираю успешно со следующим 9.1.1

Так что, наконец, это больше проблема grpc, чем следующая проблема? Что ты думаешь по этому поводу? Считаете ли вы, что мы должны открывать выпуск по grpc?

Большое спасибо за все ваши объяснения, которые действительно полезны.

Я предложил https://github.com/zeit/next.js/pull/9199, где установка config.experimental.cpus: 1 отключит рабочие потоки. Это делает next build успешным для всех случаев использования, которые включают grpc и которые я тестировал.

Для меня это было бы приемлемым обходным путем, пока проблема не будет устранена в grpc или firebase . Проблема в репозитории grpc (https://github.com/grpc/grpc-node/issues/778) уже существует, но, по-видимому, решение зависит от изменений восходящего потока в узле (https: // github. com / nodejs / nan / issues / 844).

Теперь я считаю, что это то, что нужно исправить в grpc , а не здесь. По крайней мере, я не вижу простого способа исправить это в Next.js без возврата к старой технологии распараллеливания, которая определенно повредила бы кодовой базе.

Если https://github.com/zeit/next.js/pull/9199 будет принят, у нас, по крайней мере, будет способ создавать проекты, которые зависят от firebase/firestore , даже если время сборки может быть больше, поскольку мы не можем использовать параллелизм.

ПРИВЕТ ВСЕМ!
Просто добавь

"двигателей": {
"узел": "10.x"
}

К вашему package.json

Добро пожаловать, программисты.

для всех, кто отслеживал эту проблему:

Я могу подтвердить, что больше не получаю сообщение «Модуль не саморегистрировался» при использовании grpc.
v9.3.2 включает # 11347, который исправил это

У меня такая же ошибка

репо
ошибка строительства

Error: Error occurred while parsing your function triggers.

Error: 
Something went wrong installing the "sharp" module

Module did not self-register.
Была ли эта страница полезной?
0 / 5 - 0 рейтинги