nodemon -v
: 1.17.3node -v
: 8.10.0nodemon app.js
يجب إعادة تشغيل التطبيق عندما تكون هناك تغييرات باستخدام نفس خادم http (المضيف والخادم)
يعيد تشغيل التطبيق ولكن مع ظهور خطأ يقول EADDRINUSE.
app.js
و dummy.js
app.js
يتطلب dummy.js
nodemon app.js
dummy.js
لا يمكن التكرار:
// app.js
require('./dummy.js');
require('express')().listen(3000);
بنية الدليل (sans node_modules) - لاحظ أيضًا أنه لا يوجد nodemon.json عالمي قيد التشغيل:
❯ tre
1 .
2 ├── app.js
3 ├── dummy.js
4 ├── package-lock.json
5 └── package.json
6
7 0 directories, 4 files
تفريغ التكوين:
--------------
node: v8.9.1
nodemon: master: aa18c806b37715a5b13aa7660e098f1fe7319a1c (1 dirty files)
command: /Users/remy/.nvm/versions/node/v8.9.1/bin/node /Users/remy/.nvm/versions/node/v8.9.1/bin/nodemon --dump
cwd: /Users/remy/Sites/nodemon/issues/1316
OS: darwin x64
--------------
{ run: false,
system: { cwd: '/Users/remy/Sites/nodemon/issues/1316' },
required: false,
dirs: [ '/Users/remy/Sites/nodemon/issues/1316' ],
timeout: 1000,
options:
{ dump: true,
ignore:
[ '**/.git/**',
'**/.nyc_output/**',
'**/.sass-cache/**',
'**/bower_components/**',
'**/coverage/**',
'**/node_modules/**',
re: /.*.*\/\.git\/.*.*|.*.*\/\.nyc_output\/.*.*|.*.*\/\.sass\-cache\/.*.*|.*.*\/bower_components\/.*.*|.*.*\/coverage\/.*.*|.*.*\/node_modules\/.*.*/ ],
watch: [ '*.*', re: /.*\..*/ ],
ignoreRoot:
[ '**/.git/**',
'**/.nyc_output/**',
'**/.sass-cache/**',
'**/bower_components/**',
'**/coverage/**',
'**/node_modules/**' ],
restartable: 'rs',
colours: true,
execMap: { py: 'python', rb: 'ruby' },
stdin: true,
runOnChangeOnly: false,
verbose: false,
signal: 'SIGUSR2',
stdout: true,
watchOptions: {},
execOptions:
{ script: 'index.js',
exec: 'node',
args: [],
scriptPosition: 0,
nodeArgs: undefined,
execArgs: [],
ext: 'js,mjs,json',
env: {} },
monitor:
[ '*.*',
'!**/.git/**',
'!**/.nyc_output/**',
'!**/.sass-cache/**',
'!**/bower_components/**',
'!**/coverage/**',
'!**/node_modules/**' ] },
load: [Function],
reset: [Function: reset],
lastStarted: 0,
loaded: [],
watchInterval: null,
signal: 'SIGUSR2',
command:
{ raw: { executable: 'node', args: [ 'index.js' ] },
string: 'node index.js' } }
--------------
سأترك هذه المشكلة مفتوحة لك لتصحيحها والعثور على الإجابة (على افتراض أنها لا تصبح قديمة).
واجهت هذه المشكلة من قبل. لقد حدث ذلك بالصدفة.
IMO ، يرجع هذا النوع من المشكلات إلى إعادة تشغيل nodemon للخادم قبل تحرير المنفذ المستخدم.
هل نختار القضايا القابلة للتكرار بدلاً من الآراء؟ سيساعد ذلك في إصلاح الخطأ ...
إذا كان هناك أي شيء يمكنه تكرار هذا باستمرار (حتى بطريقة مفتعلة) ، فلنقم بذلك ، وإلا فسيتم إغلاق هذه المشكلة في غضون أسبوع تقريبًا.
تم ذكر هذا مرة أخرى مؤخرًا في قضية مغلقة. https://github.com/remy/nodemon/issues/1025#issuecomment -381025138.
سأحاول إنشاء اختبار آخر وآمل أن أتمكن من تحديد السبب.
لدي نفس المشكلة على Ubuntu 16.04 nodemon 1.17.3 مع تشغيل nodemon --watch src/theme.json --watch webpack.config.js --exec webpack-dev-server --port=4200
. عند النقر فوق CTRL + C ، يتم قتل nodemon لكن webpack-dev-server ليس كذلك. عند تشغيل webpack-dev-server
بمفرده ، لا أواجه مثل هذه المشكلة.
preslavsh هل يمكن أن تعطيني الريبو
لا يمكنني مشاركة الريبو ، لكن يمكنني العمل على المشكلة لاحقًا أو إعادة إنتاجها في مشروع آخر. شكرا لك.
أيضا تواجه هذه المشكلة. لسوء الحظ ، لا يمكنني مشاركة المستودع ولكنني أرغب في قضاء بعض الوقت لاحقًا لاختبار مثالك ومحاولة إعادة إنتاج مثال في مستودع صغير.
[nodemon] 1.17.3
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `ts-node ./bin/www`
Starting server from bin/www
Server started at http://localhost:8080
[nodemon] restarting due to changes...
[nodemon] restarting due to changes...
[nodemon] starting `ts-node ./bin/www`
Starting server from bin/www
Error: listen EADDRINUSE :::8080
at Object._errnoException (util.js:1022:11)
at _exceptionWithHostPort (util.js:1044:20)
at Server.setupListenHandle [as _listen2] (net.js:1367:14)
at listenInCluster (net.js:1408:12)
at Server.listen (net.js:1492:7)
at Object.<anonymous> (/home/-----/bin/www:12:28)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Function.Module.runMain (module.js:693:10)
at Object.<anonymous> (/home/-----/node_modules/ts-node/src/bin.ts:145:12)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
[nodemon] app crashed - waiting for file changes before starting...
العقدة: 8.11.1
Nodemon: 1.17.3
نظام التشغيل: دبيان 9
تحرير: تمت محاولة التكرار باستخدام الرمز الوهمي أعلاه ولم يتمكن من التكرار. سأقوم ببعض الاختبارات الإضافية مع مستودعي الخاص.
تستمر عملية
فيما يلي رموز لتكرار هذه الحالة.
OPedsamonte وآخرون ، مهم:
ما الذي تستخدمه لتشغيل التطبيق الخاص بك؟
@ jasonxia23 أخشى أن هذا اختبار غير صالح. أنت ترسل إشارة SIGKILL
( -9
) إلى عملية العقدة الجذرية (nodemon) لذلك ليس لديها القدرة على تنظيف العملية الفرعية.
إذا نفدت الذاكرة وقتل مستوى نظام التشغيل ، إذن نعم ، ستسوء الأمور. لكن هذه المشكلة الأصلية المقدمة لا تتعلق بذلك ، فهي تستند إلى إعادة تشغيل قائمة على رمز وما زالت العملية التابعة قيد التشغيل في الخلفية (آسف ، ستحتاج إلى المحاولة مرة أخرى).
حتى الآن لا توجد اتجاهات حول كيفية تكرار هذا الخطأ.
لدي نفس المشكلة.
هذه هي المحطة الطرفية الخاصة بي منذ اللحظة التي أقوم فيها بتشغيل الخادم.
➜ dev-connector git:(models-and-authentication) ✗ npm run server
> [email protected] server /home/logan/dev/dev-connector
> nodemon server.js
[nodemon] 1.17.3
[nodemon] to restart at any time, enter 'rs'
[nodemon] watching: *.*
[nodemon] starting 'node server.js'
Server running on port 5000
MongoDB Connected
//SAVING NEW FILE OCCURS HERE.
[nodemon] restarting due to changes...
[nodemon] starting node server.js
events.js:183
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE :::5000
at Object._errnoException (util.js:1022:11)
at _exceptionWithHostPort (util.js:1044:20)
at Server.setupListenHandle [as _listen2] (net.js:1367:14)
at listenInCluster (net.js:1408:12)
at Server.listen (net.js:1492:7)
at Function.listen (/home/logan/dev/dev-connector/node_modules/express/lib/application.js:618:24)
at Object.<anonymous> (/home/logan/dev/dev-connector/server.js:33:5)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Function.Module.runMain (module.js:693:10)
at startup (bootstrap_node.js:188:16)
at bootstrap_node.js:609:3
[nodemon] app crashed - waiting for file changes before starting...
لا أعرف ما إذا كان بإمكاني المساعدة في أي شيء بخلاف ما قاله الملصق الأصلي.
نظام التشغيل: Ubuntu 16.04
تواجه هذا أيضًا مع nodemon 1.17.3 ، العقدة 8.11
الرجاء إعادة الاختبار باستخدام nodemon --signal SIGTERM
والإبلاغ عما إذا كنت قادرًا على تكرار المشكلة أم لا.
لم يكن لدي أي شيء يسمح لي بتكرار هذه المشكلة (وأظن بشدة أنها مزيج من المشكلات استنادًا إلى كود المؤلف ، و env ، والتكوين ، وما إلى ذلك). سأضطر إلى إغلاق هذه المشكلة - إلا إذا كان شخص ما قادرًا على محاولة تصحيح الأخطاء بنفسه.
لم أتمكن من تكرارها منذ أن واجهت الخطأ. عندما واجهت الخطأ مرة أخرى (مرة واحدة فقط) ، استخدمت الأمر killall node
ولم يظهر لي الخطأ منذ ذلك الحين. قد يكون الأمر أن نظام التشغيل لا يقتل العملية قبل إعادة تشغيل الخادم. لكن يمكنني التكهن فقط. أنا آسف لأنني لم أحصل على الكثير من المساعدة ، فأنا ما زلت جديدًا نسبيًا على عالم التطوير وأحاول تقديم أكبر قدر ممكن من المساعدة.
تحرير: إذا واجهت الخطأ ، فسأعيد الاختبار على الفور باستخدام nodemon --signal SIGTERM
.
تضمين التغريدة كانت تواجه نفس المشكلة ولكن killall node
أصلحها.
بالنسبة لي ، تحدث المشكلة بسبب استخدام concurrently
(وهو بحد ذاته حل بديل للمشكلة التي لا يفهمها nodemon أنني بحاجة إلى أكثر من عملية واحدة قيد التشغيل). إذا لم أكن مخطئًا ، فسيتم إغلاقها بشكل متزامن ويعتبر nodemon أن المهمة قد أنجزت.
حتى مع عدم استخدام المتزامن ، واجهت الكثير من المشكلات المماثلة في الماضي بسبب تعارضات الخروج من nodemon والخروج من العملية.
يمكنك عمليًا حل جميع المشكلات غير المنطقية المتعلقة بالمنافذ مثل هذا:
"events": {
"restart": "fuser -k 5000/tcp ; fuser -k 3050/tcp"
}
يقول ما سبق بشكل أساسي "اقتل أي شيء يعمل على منفذي TCP 5000 و 3050"
قد ترغب أيضًا في إضافة هذا في نص قبل بدء nodemon:
# replace with your own ports
fuser -k 5000/tcp
fuser -k 3050/tcp
تحتاج أيضًا إلى إضافة هذا أيضًا إلى أمر nodemon:
--delay 1500ms
إذا لم يكن هناك تأخير ، فستحصل على بعض تعارض المنافذ مرتين من أصل 10.
يمنع التأخير أيضًا nodemon من إعادة تشغيل البريد العشوائي لأنه يعيد تعيين كل تغيير جديد (يمنع أي شيء آخر يسبب التعارض).
سيكون من الأجمل أن يكون قتل المنافذ قبل إعادة التشغيل مجرد شيء تم إنشاؤه (إلى جانب القدرة على تنفيذ نصوص متعددة في وقت واحد).
ccremy
srcspider شكرا لك على هذا. أعلم أن OP لم يكن يستخدم بشكل متزامن ، لكنني أعلم أن ذلك يتسبب في نفس الوقت في بعض المشكلات في مشكلات أخرى.
هل تمانع في فتح العلاقات العامة لإضافة هذا إلى الأسئلة الشائعة؟ إنها نصيحة مفيدة للآخرين. شكرا لك مرة أخرى.
سأغلق هذه المشكلة في الساعات القليلة القادمة حتى يتمكن أي شخص من تقديم أي محاولة لتكرار هذه المشكلة. أخشى أنه بقدر ما واجه الناس المشكلة ، لم يكن لدي ما يكفي لمواصلة تكرارها.
أقدر أيضًا أن هناك العشرات من الطرق التي يمكن أن يحدث بها ذلك (رفض العملية الفرعية إغلاق الاتصالات والاستمرار في العمل) ، ولكن حتى في الاختبارات المفتعلة - لا يمكنني التكرار (ربما لأنني لا أعرف المنافذ جيدًا بما يكفي).
آمل حقًا أن أحصل على بعض الجاذبية بشأن هذه المشكلة (ولست مشرفًا قذرًا!).
يسعد أي شخص أن ينشئ عددًا جديدًا مع هذا الموضوع طالما أن هناك شيئًا لاختباره.
شكرا لكم جميعا.
آسف لطرح قضية مغلقة. لقد حدث هذا بشكل متزامن ولم أشعر أنه كان مشكلة جديدة جديرة منذ أن ذكر srcspider إصلاحًا أعلاه. مجرد فضول حول كيفية إعداد ذلك بشكل صحيح .. هل هو موجود في package.json لخادمي؟ أو داخل وحدة nodemon في مكان ما؟
ccremy نظرًا لأنك توافق على الحل البديل
كنت أواجه نفس الخطأ ، بعد حفظ التغيير ، كان nodemon يعيد تحميل البنية ويتعطل بسبب مشكلة EADDRINUSE.
كنت أستخدم 1.14.1 وأقوم بالتحديث إلى * 1.18.3 * الخطأ ، والآن أعمل بسلاسة.
الآن بعد أن ذكرت ذلك ، لا أعتقد أنني رأيت الخطأ منذ فترة طويلة.
واجهت نفس المشكلة التي أصلحتها بإضافة --signal SIGTERM
يعمل إلحاق --delay 1500ms
لي في منع العنوان قيد الاستخدام. شكرا @ srcspider
بلدي الحل:
nodemon.json
{
"execMap": {
"js": "babel-node"
},
"env": {
"NODE_ENV": "development"
},
"ext": ".js,.jsx",
"ignore": [
"test",
"dist",
"docs",
"logs"
],
"events": {
"start": "sh nodemon.sh"
},
"script": "./src/server.js",
"restartable": "rs",
"verbose": false,
"watch": ["src"],
"stdin": false,
"stdout": true,
"quiet": true,
"colours": true
}
nodemon.sh
PID=$(ps aux | grep _babel-node | sed -n '2p' | awk '{print $2}');
if [ ! -z "$PID" ]; then
{ kill -9 $PID && wait $PID; } 2>/dev/null;
fi;
src/server.js
import { exec } from 'child_process';
/* ...skipped for brevity... */
process.on('uncaughtException', (err) => {
if (/EADDRINUSE/.test(err.message)) {
exec(`sh nodemon.sh`);
} else {
console.error("uncaughtException:", err.message);
}
});
// or better:
server.on('error', err => {
if (err.code === 'EADDRINUSE') {
exec(`sh nodemon.sh`);
}
});
الحيلة هي قتل المنفذ عندما يبدأ nodemon ، وليس عند إعادة تشغيله / تعطله.
لقد استخدمت process.exit () بدلاً من exec () وتعمل بشكل جيد. شكرا!
لقد واجهت هذه المشكلة اليوم واكتشفت أنه عندما أقوم بتشغيل nodemon
مباشرة من وحدة التحكم ، فإنها تعمل مثل السحر ولكن عند استخدام العقدة مثل
"scripts": {
"debug": "nodemon"
}
حصلت على هذا الخطأ
[nodemon] restarting due to changes...
Error: listen EADDRINUSE :::5000
at Object._errnoException (util.js:1022:11)
at _exceptionWithHostPort (util.js:1044:20)
at Server.setupListenHandle [as _listen2] (net.js:1367:14)
at listenInCluster (net.js:1408:12)
at Server.listen (net.js:1492:7)
at Function.listen (/home/logan/dev/dev-connector/node_modules/express/lib/application.js:618:24)
at Object.<anonymous> (/home/logan/dev/dev-connector/server.js:33:5)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Function.Module.runMain (module.js:693:10)
at startup (bootstrap_node.js:188:16)
at bootstrap_node.js:609:3
[nodemon] app crashed - waiting for file changes before starting...
حل نمط Node.js (يعمل في أنظمة تشغيل Mac و Linux و Windows):
yarn add kill-port
بعملة nodemon.json
:
{
"events": {
"restart": "kill-port 5000",
"crash": "kill-port 5000"
},
"delay": "1500"
}
استبدل المنفذ الخاص بك:
"restart": "kill-port [my port]",
ريمي ، أعتقد أنني تمكنت من تجميع الحد الأدنى من الريبو الذي يكرر هذا: راجع https://github.com/chrisveness/koa-hello-world.
بالنسبة لي ، سيؤدي هذا الريبو إلى تشغيل Error: listen EADDRINUSE :::3000
عند تغيير أي رمز. إذا قمت بإزالة الخيار -r dotenv/config
من البرنامج النصي start-dev
في package.json
، فكل شيء يعمل بشكل جيد.
أنا أقوم بتشغيل Node v10.13.0 على Linux Mint 18 (Ubuntu 16.04 - Xenial).
يمكن لـ remy التكرار عبر نموذج مشروع nestjs
:
مستندات nest: https://docs.nestjs.com/first-steps
$ npm i -g @nestjs/cli
$ nest new project
قم بتحديث أي ملف .ts في نموذج المشروع ، سترى Error: listen EADDRINUSE
بيئي: MacOS , Node v10.9.0 ، "nodemon": "^ 1.18.6" ،
forsigner نفس الخطأ مع nest ، js
استخدم هذا بدلاً من حزمة npm:
events": {
"restart": "kill $(lsof -t -i:4444)",
"crash": "kill $(lsof -t -i:4444)"
}
يعمل في لينكس
nzvtrk هل ترغب في التوسع في ما يفعله lsof -t -i:4444
وكيف يعمل هذا الحل؟
lsof
يشبه Unix فقط لذا لا يمكنك استخدام هذا الأمر على النوافذ أعتقد أن kill-port
هو الحل الأفضل.
FWIW ، هذا يحدث لي فقط عند تشغيل nodemon من خلال نص غزل ( "test-watch": "nodemon --exec 'yarn test'"
).
عند تشغيل nodemon --exec 'yarn test'"
مباشرة ، لا يحدث ذلك.
بالنسبة لي ، يحدث هذا فقط عندما أستخدم Babel مع إصدارات أحدث من nodemon تمر عبر نص برمجي الغزل.
1.13.3 - آخر إصدار عمل
1.14.0 - معطلة في جميع الإصدارات اللاحقة
كنت أواجه نفس المشكلة وفي أحدث إصدار - 1.18.7 يبدو أن هذا قد تم إصلاحه. هتافات!!
نعم ، يبدو أن [email protected] قد
نعم! 1.18.7 يعمل!
1.18.7 لديه نفس المشكلة هنا.
بالنسبة لي ، يظهر الخطأ الدقيق (@ 1.18.7) ولكن كل شيء آخر يعمل (تحديثات الكود)
لم يعد بإمكاني استخدام nodemon بسبب هذه المشكلة ، للأسف. يحدث في كل مرة ما لم أقتل النسخة السابقة. أنا على windows 7.
لقد جربت الحل الذي اقترحه forsigner دون نجاح ، فقد أدى إلى ظهور الخطأ "العنوان قيد الاستخدام" _في كل مرة كنت أقوم بتشغيل العقدة ، _ حتى إذا كنت قد قمت للتو باستخدام Taskkill المثيل السابق يدويًا. لا أستطيع أن أتخيل لماذا.
من الأفضل تجنب تصحيح الأخطاء بالخيال وإلقاء نظرة على كيف ولماذا تعطلها.
أنت تعلق أيضًا على مشكلة أثيرت بشأن إصدار أقدم بكثير من nodemon ، على جهاز Mac لا يوجد شيء للاختبار به. سأقوم بإغلاق هذه المشكلة على أمل أنه إذا كان أي شخص _ لا يزال _ يرى مشكلات مماثلة ، فسوف يقوم بذلك: طرح مشكلة جديدة ، وتضمين تفاصيل متكررة ( مع رمز ) وربما حتى البحث لمعرفة ما إذا كان هناك إصلاح يمكنه إرساله العلاقات العامة 👍
التعليق الأكثر فائدة
حل لموظفي Google ...
بالنسبة لي ، تحدث المشكلة بسبب استخدام
concurrently
(وهو بحد ذاته حل بديل للمشكلة التي لا يفهمها nodemon أنني بحاجة إلى أكثر من عملية واحدة قيد التشغيل). إذا لم أكن مخطئًا ، فسيتم إغلاقها بشكل متزامن ويعتبر nodemon أن المهمة قد أنجزت.حتى مع عدم استخدام المتزامن ، واجهت الكثير من المشكلات المماثلة في الماضي بسبب تعارضات الخروج من nodemon والخروج من العملية.
يمكنك عمليًا حل جميع المشكلات غير المنطقية المتعلقة بالمنافذ مثل هذا:
يقول ما سبق بشكل أساسي "اقتل أي شيء يعمل على منفذي TCP 5000 و 3050"
قد ترغب أيضًا في إضافة هذا في نص قبل بدء nodemon:
تحتاج أيضًا إلى إضافة هذا أيضًا إلى أمر nodemon:
إذا لم يكن هناك تأخير ، فستحصل على بعض تعارض المنافذ مرتين من أصل 10.
يمنع التأخير أيضًا nodemon من إعادة تشغيل البريد العشوائي لأنه يعيد تعيين كل تغيير جديد (يمنع أي شيء آخر يسبب التعارض).
سيكون من الأجمل أن يكون قتل المنافذ قبل إعادة التشغيل مجرد شيء تم إنشاؤه (إلى جانب القدرة على تنفيذ نصوص متعددة في وقت واحد).
ccremy