Maison > Questions et réponses > le corps du texte
将nodejs从5.1.1升级到6.10.2之后,执行生产环境的打包(`set NODE_ENV=production && webpack --config webpack.production.config.js`),控制台报错:“CALL_AND_RETYR_LAST Allocation failed -javascript heap out of memoty”。
![图片描述](/img/bVMNK1)(这是一张图片,为什么上传不了?)
我nodejs版本是6.10.2, npm原本是3.10.X,后台看在stackoverflow上看到有人说把npm更新到最新版就能解决这个问题,npm最后更新到4.5.0。
无论是百度还是stackoverflow,我都找过解决方案(我找到了webpack.cmd,在命令行“node "%~dp0\node_modules\webpack\bin\webpack.js" %* ”添加 "-max_old_space_size = 2048"参数),并且尝试了,但是没有用,怎么破?
为情所困2017-05-16 13:40:41
Hé, je l'ai finalement fait moi-même. En fait, je trouve maintenant que l'idée que j'ai commencée pour résoudre le problème est correcte, qui consiste à ajouter "--max_old_space_size" à la ligne de commande du nœud. L'erreur est que je l'ai ajouté au mauvais endroit (peut-être que cela ne fonctionne pas dans mon environnement ?). Au début, j'ai fait référence à la solution fournie par segmentfault sur un problème où le même packaging weback provoquait un débordement de mémoire nodejs, qui consistait à l'ajouter au webpack.cmd global (le chemin est : C:UsersAdministratorAppDataRoamingnpmwebpack.cmd), comme indiqué ci-dessous :
Mais il a été constaté que cela ne fonctionnait pas. Après avoir exécuté la commande, la mémoire débordait toujours. Ensuite, j'ai lutté pendant longtemps, et le lendemain, j'ai cherché à nouveau la réponse sur stackoverflow et j'ai trouvé cette réponse :
Donc, j'ai modifié le script de hook npm utilisé pour l'empaquetage dans mon environnement de production en : "set NODE_ENV =production && node --max_old_space_size=2048 node_modules/webpack/bin/webpack.js --config webpack.production.config.js". C'est-à-dire que j'utilise un webpack local/local au lieu d'un webpack installé globalement pour l'empaquetage. Le problème de débordement de mémoire a été résolu en ajoutant "--max_old_space_size=2048" à nodejs pour étendre la mémoire à 2*1024M=2G.