Next.js: `next build` échoue avec "Le module ne s'est pas auto-enregistré."

Créé le 11 juil. 2019  ·  55Commentaires  ·  Source: vercel/next.js

Rapport d'erreur

Décrivez le bogue

next build échoue avec l'erreur suivante après la mise à niveau vers 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' }

Une erreur se produit après la compilation.
Le déclencheur du dernier build avant l'erreur est :
https://github.com/zeit/next.js/blob/5a54e8715a7a7a92175addc19f4ec9f8f7bbd2e7/packages/next/build/index.ts#L342

Reproduire

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

Comportement prévisible

next build succès

Informations système

  • OS : Arch Linux
  • Version de Next.js : 9.0.0

Contexte supplémentaire

J'ai essayé yarn install --force et Clean dépend de l'installation.

next . commande dev

p0

Commentaire le plus utile

J'ai le sentiment que cela est causé par un rapport de construction nouvellement ajouté. Parce que l'erreur se produit une fois la construction terminée

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.

Tous les 55 commentaires

Veuillez fournir une reproduction complète

Je fournirai la reproduction demain. Aujourd'hui je n'ai plus accès à mon pc.

Fermez car il s'agit d'un problème de firebase grpc.

Il y a un problème similaire dans #7821

Fermez car il s'agit d'un problème de firebase grpc.

Comment puis-je le réparer?
j'ai le meme probleme

@go-rani Actuellement, je n'ai pas de solution car je ne suis pas tout à fait sûr que ce problème appartienne à firebase. J'essaie de reproduire ce bug dans l'exemple de projet.

J'ai le même problème. Cela redevient normal lorsque je rétrograde en v8
voici l'image que j'utilise :
gcr.io/google_appengine/nodejs

@vbilici intéressant...

J'ai le sentiment que cela est causé par un rapport de construction nouvellement ajouté. Parce que l'erreur se produit une fois la construction terminée

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.

J'ai le même problème.

Mais lorsque je commente "import firebase/firestore", ce problème ne s'est pas produit.

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

Mais j'ai besoin de firebase/firestore. ce n'est pas une solution.

D'après ce que je comprends, toute dépendance avec grpc brisant la construction de nextjs?

Obtenir ce problème également.

J'ai pu construire au début, mais cela se produit lorsque mes pages / pages sont devenues volumineuses. J'ai essayé de revenir à un ancien commit où je peux construire sans problème et dupliquer mon dossier / pages (-v1, -v2 et ainsi de suite) build après build jusqu'à un point où il échoue.

Je ne pouvais pas quantifier à quel point "grand" est grand, mais j'espère que cela vous aidera.

@timneutkens @Vista1nik J'ai créé une reproduction ici https://github.com/jpbow/module-register-build-issue

@jpbow Merci pour la reproduction, ajouté au problème.

juste sonner, cela échoue également lors du déploiement avec maintenant 2.0

Il semble que NextJS 9 soit incompatible avec les dépendances qui utilisent de toute façon GRPC.
Actuellement, j'essaie de trouver un autre package utilisant GRPC pour le confirmer.

@Vista1nik, cela échouera avec firebase et gcp. Les deux utilisent grpc.

après avoir mis à jour mon next.config.js avec ce qui suit (comme mentionné dans #6073 )

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

lien : https://github.com/zeit/next.js/issues/6073#issuecomment -498025104

Mon erreur de déploiement a changé, je ne pense pas que ce soit optimal, mais cela peut être une solution de contournement temporaire pour les autres qui essaient de mettre à jour les versions de production

la nouvelle erreur semble liée à la boîte à outils 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 |  

ce qui est ennuyeux car je n'utilise pas du tout AMP, je ne sais pas à quel point c'est lié, mais j'espère que c'est utile.

J'ai le même problème avec firebase. Quelqu'un a-t-il trouvé une solution de contournement pour le déploiement ?

Pour une raison quelconque, en construisant mon projet sur mac OS _works_, alors que sur Debian, j'obtiens la même erreur "Le module ne s'est pas auto-enregistré".

Quelqu'un a-t-il trouvé une solution à ce problème ?

Il doit y avoir une blague sur "Acheter un nouveau Mac".
Actuellement, seul le déclassement est la solution.

testé et #8290 le corrige. Quand arrive la version Canary qui le contient ?

Salut @getorca , le correctif devrait être dans v9.0.4-canary.3 qui est en place maintenant

Ce changement a été publié sous le nom [email protected] . Vous pouvez mettre à jour votre ou vos applications !

semble que cela ait régressé dans 9.0.6 . la rétrogradation à 9.0.5 ou 9.0.4 se construit toujours correctement. avec 9.0.6 j'obtiens la même erreur à propos de grpc

@ebemunk, veuillez fournir une reproduction claire et concise que nous pourrons consulter. Publier "Ça ne marche pas dans mon cas" ne résoudra pas votre problème.

merci d'avoir regardé @timneutkens , désolé, je n'ai pas fourni d'étape de reproduction car le problème est exactement le même que celui déjà signalé, et les étapes de reproduction précédentes sont toujours valides.
voici un exemple minimal, en utilisant https://github.com/jpbow/module-register-build-issue que @jpbow a créé.

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

Vous obtenez exactement la même erreur reproduite dans les commentaires précédents :

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.

Pour voir pourquoi c'est une régression, j'ai fait

yarn add [email protected]
yarn build

Il réussit comme prévu. Essayer la version pour laquelle ce problème a été résolu :

yarn add [email protected]
yarn build

Réussit à nouveau. Essayer une version avant l'arrivée de ce correctif :

yarn add [email protected]
yarn build

Échec avec le même message ci-dessus.

La ligne critique semble être import "firebase/firestore"; . Si cette ligne est supprimée, aucune erreur grpc n'est observée.

J'espère que cela aide à clarifier.

J'ai également soudainement eu cette erreur après des dizaines de versions réussies, mais il semble que la mise à jour vers la version 9.0.6 l'ait corrigée.

Avec 9.1.1 et firestore ont toujours ce problème.

EDIT : rétrograder à 9.0.5

Avec 9.1.1 et firestore ont toujours ce problème.

rétrograder à 9.0.4 ou 9.0.5 le corriger ...

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)

Cette erreur s'est produite pour chaque page

fwiw ce n'est pas vraiment un problème Next.js. Il semble que grpc brise sur des versions spécifiques de Node.js. J'ai rencontré cela l'autre jour avec le nœud 12 et cela fonctionne parfaitement bien sur le nœud 10.

@timneutkens
Mais qu'est-ce que Next utiliser dans les versions supérieures à 9.0.5 qui produisent le plantage ?
Je garde la même version de Node (11.9.0), je change simplement la version Next et j'obtiens le problème lorsqu'elle est supérieure à 9.0.5. Je suis d'accord que ce problème est causé par grpc mais pourrions-nous éventuellement isoler le lien entre les prochains changements dans 9.0.6 et grpc pour trouver une solution de contournement ?

Mais qu'est-ce que Next utiliser dans les versions supérieures à 9.0.5 qui produisent le plantage ?

N'hésitez pas à enquêter sur ce qui a causé les problèmes.

Travailler sur 9.0.6-canary.0

Crash sur 9.0.6-canary.1

Je voulais davantage enquêter que pour résoudre le problème 🚀

J'ai fait un git bisect et j'ai identifié https://github.com/zeit/next.js/commit/f81b6d56e03d3f883e8c5faebae44208bd1a328b comme le premier commit qui casse next build en conjonction avec firebase/grpc.

Je suppose que cela est lié à https://github.com/grpc/grpc-node/issues/778.

Je serais heureux de vous aider sur celui-ci, mais je suis actuellement un peu perdu quant à ce à quoi pourrait ressembler une solution appropriée.

Des idées @ijjk , @Timer , @timneutkens ?

Je teste chaque patch sur 9.0.6-canary.1 et l'erreur s'est produite sur : 61b8b73

Je continuerai à enquêter demain mais en fait je note qu'à la ligne 117 dans worker.js
const components = await loadComponents( distDir, buildId, page, serverless )

a échoué et puis

catch (error) { console.error( \nUne erreur s'est produite lors du pré-rendu ${path} : , error) return { ...results, error: true } } }

@notiles c'est intéressant. J'ai fait un git bisect entre v9.0.5 et v9.0.6-canary.1 et j'ai trouvé que le premier mauvais commit était https://github.com/zeit/next.js/commit/f81b6d56e03d3f883e8c5faebae44208bd1a328b.

Alors que le commit que vous mentionnez (https://github.com/zeit/next.js/commit/61b8b7323e089c8cc0372ce0f32402c8d70096f8) est définitivement rompu pour moi aussi, le commit avant celui-ci (https://github.com/zeit/next .js/commit/110c83fa443a7a557a82dc49968dee56e293680c) est également cassé pour moi.

Pourriez-vous l'essayer avec https://github.com/zeit/next.js/commit/f81b6d56e03d3f883e8c5faebae44208bd1a328b et voir si cela fonctionne toujours pour vous ?

@ctavan Bonjour ! De mon côté, f81b6d5 fonctionne, ma compilation a réussi.

Je trouve où ça plante mais je ne peux pas aller plus loin :

dans packages/next/next-server/server/load-components.ts
ligne 70 : interopDefault(require(appPath)) a échoué.

appPath a l'air bien : /Users/me/myproject/.next/server/static/eUfibox1CSt3iNdo6twQi/pages/_app

@notiles c'est vraiment, vraiment bizarre ! Quelle version de nœud et système d'exploitation utilisez-vous ?

Voici les étapes détaillées pour reproduire comment je peux reproduire de manière fiable le problème sur ma machine. Souhaitez-vous également les essayer et me faire savoir si cela fonctionne vraiment pour vous avec 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.

Je suis aussi sur Mac OS 10.14.6 mais je suis sur node 11.9.0 je vais essayer de te dire si je peux construire

Comme vous, il plante avec f81b6d5.

Dans mon projet, j'utilise

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

Je mets à jour ma firebase vers 7.2.1 et j'essaye avec 61b8b73 et la compilation réussit... vraiment bizarre

Essayez de supprimer cet import : import "firebase/firestore" ; uniquement dans index.js

@notiles si vous supprimez l'une des deux importations firebase/firestore vous ne provoquez plus une construction parallèle de deux modules qui nécessitent grpc .

Comme mentionné ci-dessus, je suis assez confiant que le problème que nous observons ici est causé par https://github.com/grpc/grpc-node/issues/778 qui indique que grpc "Ne prend pas en charge plusieurs threads ".

Comme solution de contournement, j'ai compris que les builds réussissaient avec les next.config.js :

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

et échouent dès que vous augmentez le nombre de CPU (ce qui prouve encore que l'exécution de travailleurs parallèles est la cause première). Évidemment, les builds ne tireront plus parti de plusieurs threads de travail, il s'agit donc d'une solution de contournement, pas d'une solution.

@ijjk , @Timer , @timneutkens désolé de vous avoir encore géreriez -vous ce problème ?

C'est clair @ctavan ! Merci beaucoup pour cette explication. Malheureusement, j'ai toujours le problème avec expérimental : {
processeur : 1,
}

` Avertissement : Vous avez activé la ou les fonctionnalités expérimentales.Les fonctionnalités expérimentales ne sont pas couvertes par sever et peuvent provoquer un comportement inattendu ou interrompu de l'application.

Utilisation de la configuration babel externe
Emplacement : "/Utilisateurs/moi/monprojet/.babelrc"
Création d'un build de production optimisé

Compilé avec succès.

Optimisation automatique des pages ..
Une erreur s'est produite lors du pré-rendu /download/[document_id] : Erreur : Échec du chargement de /Users/me/myproject/node_modules/grpc/src/node/extension_binary/node-v72-darwin-x64-unknown/grpc_node.node. Le module ne s'est pas auto-enregistré.

etc...`

Je bascule de Node 11.9.0 à Node 10.12 et Node 13.0.1 à Node 12.13.0 sans succès...

J'ai été un peu trop rapide. Avec le next.config.js de mon commentaire précédent, la version a fonctionné pour https://github.com/zeit/next.js/commit/f81b6d56e03d3f883e8c5faebae44208bd1a328b mais pas avec [email protected] car https://github. com/zeit/next.js/commit/61b8b7323e089c8cc0372ce0f32402c8d70096f8 a introduit jest-worker à next export qui est appelé dans le cadre de l'étape de construction.

Mon idée initiale était de transmettre les config.experimental.cpus au travailleur d'exportation, mais je n'y suis pas parvenu. Même en définissant numWorkers: 1 l'étape d'exportation de la construction échouera avec l'erreur Module did not self-register. .

La seule façon de le faire fonctionner pour mon cas d'utilisation était de définir enableWorkerThreads: false dans :

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

Une solution de contournement possible pourrait être d'autoriser la définition de config.experimental.cpus: 0 et, par conséquent, de désactiver complètement les threads de travail. Je fournirai une Pull Request pour cette suggestion sous peu.

Ok @ctavan ! C'est tout à fait vrai, je change enableWorkerThreads en false et la compilation réussit avec la prochaine 9.1.1

Donc finalement c'est plus un problème de grpc qu'un prochain numéro ? Quel est votre sentiment à ce sujet ? Pensez-vous que nous devons ouvrir un problème sur grpc ?

Merci beaucoup pour toutes vos explications qui sont vraiment utiles.

J'ai maintenant proposé https://github.com/zeit/next.js/pull/9199 où le paramètre config.experimental.cpus: 1 désactivera complètement les threads de travail. Cela permet à next build réussir pour tous les cas d'utilisation impliquant grpc et que j'ai testés.

Pour moi, ce serait une solution de contournement acceptable jusqu'à ce que le problème soit résolu dans grpc ou firebase . Il y a déjà un problème dans le grpc (https://github.com/grpc/grpc-node/issues/778) mais apparemment la solution dépend des modifications en amont du nœud (https://github. com/nodejs/nan/issues/844).

Je crois maintenant que c'est quelque chose qui doit plutôt être corrigé dans grpc , pas ici. Au moins, je ne vois pas de moyen simple de le réparer dans Next.js sans revenir à l'ancienne technologie de parallélisation qui nuirait définitivement à la base de code.

Si https://github.com/zeit/next.js/pull/9199 est accepté, nous aurions au moins un moyen de créer des projets qui dépendent de firebase/firestore , même si les temps de construction peuvent être plus longs car nous ne pouvons pas utiliser le parallélisme.

SALUT TOUT LE MONDE!
Il suffit d'ajouter

"moteurs": {
"nœud": "10.x"
}

À votre package.json

Vous êtes les bienvenus codeurs.

pour toute autre personne qui suivait ce problème :

Je peux confirmer que je n'obtiens plus "Le module ne s'est pas auto-enregistré" lors de l'utilisation de grpc.
v9.3.2 inclut #11347 qui est ce qui l'a corrigé

J'ai la même erreur

dépôt
erreur de construction

Error: Error occurred while parsing your function triggers.

Error: 
Something went wrong installing the "sharp" module

Module did not self-register.
Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

timneutkens picture timneutkens  ·  3Commentaires

havefive picture havefive  ·  3Commentaires

irrigator picture irrigator  ·  3Commentaires

rauchg picture rauchg  ·  3Commentaires

kenji4569 picture kenji4569  ·  3Commentaires