Nodemon: Nodemon sering membiarkan proses anak berjalan (terlepas)

Dibuat pada 10 Mei 2017  ·  100Komentar  ·  Sumber: remy/nodemon

Saya menggunakan Nodemon untuk me-restart server Express dalam pengembangan. Saya bahkan membersihkan dengan server.close() pada proses keluar. Tetapi saya sering mendapatkan "Port 3000 sudah digunakan" ketika dimulai, menyarankan nodemon gagal mematikan proses anak yang lama, dan itu masih berjalan sebagai proses yang terpisah. Saya harus membunuh nodemon, menjalankan killall node , dan memulai ulang nodemon lagi. Apakah ini masalah yang diketahui? Apakah ada solusi?

  • OS X El Capitan
  • simpul v7.10.0.
  • nodemon v1.11.0

Komentar yang paling membantu

Saya mengalami masalah yang sama dan sepertinya muncul entah dari mana. Saya mulai menambahkan ini ke bagian bawah file js entri saya sehingga itu adalah baris skrip saya yang terakhir dieksekusi, dan sepertinya menyelesaikan masalah bagi saya. Semoga membantu!

Saya keluar dari proses nodemon saya di iTerm dengan CTRL+C dan pada mac yang menjalankan OSX Sierra 10.12.5.

process.on('SIGINT', () => { console.log("Bye bye!"); process.exit(); });

Semua 100 komentar

Anehnya saya sudah mulai memiliki masalah yang sama di sini. Saya tidak pernah mengalami ini sebelumnya, dan saya tidak yakin apa yang saya perbarui untuk mulai mengalami masalah ini.

OS X El Capitan
Simpul v6.9.1
nodemon v1.11.0

Sama di sini, saya juga mendapatkan kesalahan EADDRINUSE di server ekspres saya

OS X Sierra
Simpul v6.10.3
nodemon v1.11.0

31960 ttys005    0:00.41 node /Users/harman.goei/.nvm/versions/node/v7.10.0/bin/nodemon -e ts --verbose --exec ts-node  lib/server.ts
31962 ttys005    0:00.10 node /Users/harman.goei/.nvm/versions/node/v7.10.0/bin/ts-node lib/server.ts
31963 ttys005    0:01.10 /Users/harman.goei/.nvm/versions/node/v7.10.0/bin/node /Users/harman.goei/.nvm/versions/node/v7.10.0/lib/node_modules/ts-node/d
ist/_bin.js lib/server.ts

nodemon memunculkan 31962, tetapi 31963 masih tetap ada (saya pikir 31963 adalah proses anak dari 31962). Kemudian saat restart, ini menyebabkan masalah, karena 31963 server masih berjalan.

Memperbarui:
Setelah mencari, sepertinya SIGUSR2 tidak cukup baik untuk mematikan proses anak. SIGHUP diperlukan.

Saya mempunyai masalah yang sama. Apakah ada yang menemukan solusi belum?

Saya mengalami masalah yang sama dan sepertinya muncul entah dari mana. Saya mulai menambahkan ini ke bagian bawah file js entri saya sehingga itu adalah baris skrip saya yang terakhir dieksekusi, dan sepertinya menyelesaikan masalah bagi saya. Semoga membantu!

Saya keluar dari proses nodemon saya di iTerm dengan CTRL+C dan pada mac yang menjalankan OSX Sierra 10.12.5.

process.on('SIGINT', () => { console.log("Bye bye!"); process.exit(); });

Masalah yang sama, tidak apa-apa jika saya CTRL+C keluar dan meluncurkan npm start lagi.

$ npm start

> [email protected] start ter
> npm run build:live


> [email protected] build:live ter
> nodemon --exec ./node_modules/.bin/ts-node -- ./index.ts

[nodemon] 1.11.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `./node_modules/.bin/ts-node ./index.ts`
NodeJS server started...
[nodemon] restarting due to changes...
[nodemon] starting `./node_modules/.bin/ts-node ./index.ts`
[nodemon] restarting due to changes...
[nodemon] starting `./node_modules/.bin/ts-node ./index.ts`
NodeJS server started...
NodeJS server started...
Error: listen EADDRINUSE :::3000
    at Object.exports._errnoException (util.js:1016:11)
    at exports._exceptionWithHostPort (util.js:1039:20)
    at Server.setupListenHandle [as _listen2] (net.js:1307:14)
    at listenInCluster (net.js:1355:12)
    at Server.listen (net.js:1455:7)
    at Application.listen (/ter/node_modules/koa/lib/application.js:64:19)
    at Object.<anonymous> (/er/index.ts:9:5)
    at Module._compile (module.js:569:30)
    at Module.m._compile (ter/node_modules/ts-node/src/index.ts:379:23)
    at Module._extensions..js (module.js:580:10)
[nodemon] app crashed - waiting for file changes before starting...
^C
$ npm start

> [email protected] start ter
> npm run build:live


> [email protected] build:live ter
> nodemon --exec ./node_modules/.bin/ts-node -- ./index.ts

[nodemon] 1.11.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `./node_modules/.bin/ts-node ./index.ts`
NodeJS server started...

Masalah yang sama, bagaimana mengatasinya?

[[16:13:36] [nodemon] restarting due to changes...
[16:13:36] [nodemon] starting `node test/phantomFlow/test/test.js --delay 2.5 --ignore test/`
Parallelising 1 test files on 1 processes.

Picking up job: flows\carepilotweb.test.js
events.js:160
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE :::9001
    at Object.exports._errnoException (util.js:1026:11)
    at exports._exceptionWithHostPort (util.js:1049:20)
    at Server._listen2 (net.js:1257:14)
    at listen (net.js:1293:10)
    at Server.listen (net.js:1389:5)
    at Function.app.listen (C:\workspace\deleteme_0420\carepilot-web\test\phantomFlow\node_modules\connect\lib\proto.js:232:24)
    at Object.<anonymous> (C:\workspace\deleteme_0420\carepilot-web\test\phantomFlow\test\test.js:46:4)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
[16:13:36] [nodemon] app crashed - waiting for file changes before starting...
](url)

Sunting:
ketika saya mengedit file tegukan seperti ini, itu berhasil

gulp.task('report-debug', /*['clean-build-app-dev', 'validate-devserver-scripts'],*/ function(){
    // start nodemon to load test.js
    plugins.nodemon({ script: 'server/server.js', ext: 'js', watch: ['server/'], args:['--ignore', 'test/'], env: { NODE_ENV: 'development' } })
        .on('start', function () {
            plugins.nodemon({ script: 'test/phantomFlow/test/test.js', watch: ['server/'], args:['debug', '--ignore', 'test/'], stdout: false })
            .on('readable', function() {
                this.stdout.on('data', function(chunk) {
                    if (/Completed /.test(chunk)) {
                        const { exec } = require('child_process');
                        exec('node test/phantomFlow/test/test.js report', ['--ignore', 'test/']);
                    }
                    process.stdout.write(chunk);
                });
                this.stderr.pipe(process.stderr);
            });
        });
});

Memiliki masalah yang sama persis di sini.

Maaf, satu-satunya hal yang saya temukan setelah beberapa pengujian adalah instalasi OS yang bersih memperbaikinya untuk saya di Linux. Tentu saja saya tidak akan membersihkan instalasi setiap saat, saya hanya main-main.

Sama di sini di OSX. Menjaga semua proses node berjalan (1.12.0)

Adakah solusi untuk masalah ini?

Tidak, saya belum menghadapi masalah itu lagi. Saya tidak tahu apa yang menyebabkan nodemon kehilangan proses.

Ada solusi?

Saya juga mengalami masalah ini di ubuntu 16.04, nodemon 1.12.1 dan node v8. Belum menemukan solusi selain mematikan proses secara manual.

Untuk menguraikan lebih lanjut apa yang saya lakukan pada komentar saya sebelumnya - sinyal ( SIGUSR2 ) yang dikirim ke program saya tidak menyebabkannya keluar. Saya harus mengubah sinyal menjadi SIGHUP sebagai gantinya.

Saya membuat file bernama nodemon.json :

{
  "signal": "SIGHUP",
  "env": {
    "NODE_ENV": "development"
  },
  "ext": "ts",
  "exec": "ts-node --inspect ./lib/server.ts"
}

dan di package.json saya, karena saya menggunakan skrip npm, menjalankan nodemon sudah cukup:

"dev": "nodemon",

Masalahnya ada di ts-node itu sendiri: https://github.com/TypeStrong/ts-node/pull/458

Untuk menghilangkan aplikasi/program Anda dari kesalahan ini di windows, Anda harus mematikan proses PID di port 3000.

Masalah sebenarnya di sini adalah nodemon menggunakan child_process.spawn alih-alih child_process.fork untuk membuat proses anak . Dalam hal ini, membunuh orang tua tidak membunuh anak-anaknya.

Solusi untuk ini adalah memodifikasi nodemon untuk menggunakan child_process.fork saat membuat proses anak simpul (dan child_process.spawn untuk executable non-simpul), sehingga pengumpulan sampah simpul (dan otomatis) yang anggun (dan otomatis) dapat berlaku setelah orang tua meninggal.

Menggunakan child_process.fork juga menambahkan manfaat tambahan menggunakan saluran IPC untuk komunikasi antara proses simpul induk dan anak sehingga metode process.send dan process.on dapat digunakan untuk komunikasi antar-proses .

Saya telah membuat PR sederhana di sini yang membahas masalah ini (tetapi belum lulus tes CI): https://github.com/remy/nodemon/pull/1134

Semoga pengelola dapat menyempurnakan kode lebih lanjut, atau jika saya menemukan waktu di masa depan untuk membantu, saya akan melakukannya.

Perbaikan sementara yang dapat diterapkan untuk mengatasi ini adalah:

// NOTE: this ONLY works when using nodemon as a `require` module.
// I don't have a solution for booting nodemon from the CLI. Sorry!

var nodemon = require('nodemon');

process

  // Handle normal exits
  .on('exit', (code) => {
    nodemon.emit('quit');
    process.exit(code);
  })

  // Handle CTRL+C
  .on('SIGINT', () => {
    nodemon.emit('quit');
    process.exit(0);
  });

tl;dr child_process.fork adalah solusi terbersih karena secara otomatis membersihkan proses anak ketika orang tua meninggal. nodemon harus diedit agar menggunakan fork daripada spawn (hanya untuk node dapat dieksekusi).

Saya ingat melalui seluruh lompatan untuk mengetahui metode mana yang benar. IIRC spawn adalah metode yang perlu saya gunakan untuk mempertahankan beberapa tautan yang diberikan spawn kepada saya tetapi fork (et al) tidak.

Jangan ragu untuk mengirim PR yang lulus semua tes jika menurut Anda ini akan berhasil.

Ah, maaf, ketinggalan PR, tapi ya, gagal dan saya curiga itu karena Anda forking.

Yah, ya, seperti yang saya katakan, dan seperti yang dinyatakan dalam dokumentasi node , fork ditujukan khusus untuk digunakan dengan proses simpul yang menghasilkan proses simpul anak, sedangkan spawn untuk semua proses non-simpul lainnya.

Metode child_process.fork() adalah kasus khusus dari child_process.spawn() yang digunakan secara khusus untuk menelurkan proses Node.js baru. Seperti child_process.spawn(), objek ChildProcess dikembalikan. ChildProcess yang dikembalikan akan memiliki saluran komunikasi tambahan bawaan yang memungkinkan pesan diteruskan bolak-balik antara induk dan anak. Lihat subprocess.send() untuk detailnya.
https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options

Saya akan melihat apakah saya dapat melanjutkan dengan PR tetapi mungkin tidak lama. .apply Anda gunakan untuk memanggil spawn bukanlah sesuatu yang biasa saya gunakan, dan kita perlu menemukan cara untuk menangani stdin/out/err yang dapat dilakukan dengan silent: true sebagai opsi saat melakukan forking.

Apakah tes Anda memeriksa PID anak atau memeriksa stdin/out, atau ..?

Jika Anda yakin bahwa spawn adalah satu-satunya jawaban untuk repo Anda, maka saya sarankan mencoba menyimpan PID anak yang muncul dan membunuh .on('exit') , .on('SIGINT') , dll... meskipun saya masih berpikir akan lebih mudah menggunakan fork .

Masalah yang sama di sini, saya kira itu dimulai beberapa hari yang lalu ketika saya beralih dari NodeJS 6.4.0 ke NodeJS 8.90

Itu terjadi ketika saya pertama kali menghentikan nodemon dengan CTRL+C dan kemudian saya harus memulainya lagi.

Sekarang saya harus mematikan proses Node secara manual melalui Task Manager setiap kali [Windows 10]

Masalah yang sama di sini.

$ node -v
v8.9.2

$ nodemon -v
1.12.5

Pekerjaan @heisian di sini telah digabungkan, dan harus menyelesaikan masalah ini untuk Anda semua. Saat ini tinggal di [email protected]

eh weeet! senang telah membantu.

@heisian beberapa bit disemprotkan di sana-sini, tapi saya punya perubahan naik sekarang yang seharusnya bisa mengatasinya (kebanyakan melewati peluncuran args ke node itu sendiri).

hmm, mungkin saya tidak jelas tentang bagaimana argumen yang dimaksudkan untuk proses simpul anak direferensikan dalam run.js ?

Saya bermaksud argumen apa pun yang perlu diteruskan ke simpul untuk masuk ke variabel forkArgs :

child = fork(options.execOptions.script, forkArgs, {
...
});

Misalnya saya melakukan fork proses untuk mentranspile kode:

child_process.fork('./', [
      '--out-dir', './dist',
      '--ignore', './coverage,./dist,./docs,./embed,node_modules,shared/cli,' +
      'shared/docker,bin/tools,admin/src,main/src,partner/src,*.swp,*.swo,' +
      'admin/build,main/build,partner/build,**/tests,shared/webpack,./stories',
      '--copy-files',
      // Presets/Plugins are defined in <project_root>/.babelrc
    ], {
      execPath: './node_modules/.bin/babel',
    });

Semua itu harus setara dengan:

 ./node_modules/.bin/babel --out-dir ./dist --ignore ./coverage,./dist,./docs,./embed,node_modules,shared/cli,shared/docker,bin/tools,admin/src,main/src,partner/src,*.swp,*.swo,admin/build,main/build,partner/build,**/tests,shared/webpack,./stories --copy-files

Ya, saya mencobanya dalam pengujian lokal, ada .splice(1) yang sebenarnya menjatuhkan --inspect jika itu dalam argumen CLI, tetapi juga, itu tidak berfungsi. Saya _think_ itu karena itu memotong proses node utama (yang saat ini mengeksekusi nodemon.js) yang tidak membuka debugger.

Saya telah meretas solusi untuk saat ini (lihat komentar di PR Anda), dan itu memperbaiki masalah terbaru, tetapi saya tidak 100% yakin itu antipeluru.

hmm oke, saya akan meninjaunya dan melihat apakah solusi yang lebih baik bisa didapat. ya saya pikir itu masalahnya, --inspect harus ditandai pada proses induk yang diteruskan ke anak.

Diperbarui dari 1.12.1 ke 1.12.7 dan masih mendapatkan

Port xxxx is already in use
[nodemon] app crashed - waiting for file changes before starting...

ketika saya me-restart Nodemon setelah berhenti (CTRL+C).

(Windows 10) & ekstra :heart: ke @remy !

Bisakah Anda mengajukan masalah terpisah dan menyertakan detail lengkap tentang cara Anda menjalankan di Windows (git bash, dll)

@remy yakin, #1164

Tidak menjalankan server ekspres tetapi menjalankan soket net nodejs dan memiliki masalah yang sama dengan nodemon -v: 1.14.2
simpul -v: 9.4
ubuntu/xenial

jadi mungkin pr yang disebutkan di atas belum menyelesaikan ini?

Jika nodemon tidak crash, itu akan restart pada perubahan dengan baik tetapi jika nodemon crash atau saya harus menghentikannya maka soket akan tetap berjalan dan saya harus pkill node sebelum menjalankan nodemon lagi atau saya akan mendapatkan port yang digunakan kesalahan.

Catatan: Dalam modul saya yang memulai soket net, saya telah membuat kode pembunuh jadi ketika proses dihentikan secara tiba-tiba seperti dengan cntrl-c(SIGUP) ia mematikan soket. FYI, saya menggunakan modul on-death.

tidak menggunakan babel tetapi saya menggunakan @std/esm seperti pada nodemon --require @std/esm

Saya akan mencoba untuk mengkonfirmasi terlebih dahulu bahwa proses anak Anda memang sedang bercabang dan tidak muncul. Jika, dari proses anak Anda, Anda dapat melakukan ini:

process.send('some message')
// Should not throw an error

...dan di orang tua Anda, Anda berhasil menerima pesan:

process.on('message', function(message) {
  process.stdout.write(message)
})
// Should output 'some message'

...maka proses Anda memang telah bercabang dengan child_process.fork dan harus keluar dengan anggun saat induknya keluar. Jika hal di atas tidak berhasil, maka proses anak Anda telah menjadi spawned dan dengan demikian Anda perlu mencari cara untuk menangani penghentian proses sendiri - baik dengan SIGKILL process.on('exit') atau kombinasi keduanya.

Saya juga mengalami ini di salah satu versi terbaru dari nodemon:1.17.3

Juga mengalami ini dengan nodemon 1.17.3, node 9.2.0, pada macOS High Sierra v10.13.4, @johnnydimas satu solusi liner di atas telah memperbaikinya untuk saya, sejauh ini.

Saya mendapatkan ini di Ubuntu 18.04 dan 17.10 juga.

Memiliki ini juga! semua paket up-to-date.
di macOS High Sierra v10.13.2

@lukebrewerton @MissAnichka @danielo515 @cormickjbrowne @ajones @sinonkt @nodediggity
Saya berhasil memperbaiki masalah ini.
Ini sebenarnya bukan nodemon, tapi babel-node!
npm i kexec -D akan menyelesaikan masalah

Penjelasan:
https://github.com/babel/babel/issues/1062#issuecomment -84526036

Sunting:
Menjadi sedikit antusias dan tidak memperhitungkan kasus penggunaan lainnya.
TETAPI jika Anda menggunakan babel-node, ini akan memperbaiki masalah =D

Saya tidak menggunakan babel, hanya simpul lama js

Masih mendapatkan ini di nodemon 1.17.5 dengan node 9.5.

Sayangnya sama, berjalan dengan node -r ts-node/register index.ts

@Kamshak tolong buka masalah baru dan sertakan index.ts Anda dikupas ke contoh yang dapat direplikasi

Saya masih mengalami masalah ini dengan nodemon 1.18.3 dan node 8.11.4 di macOS 10.13.3.

Masalah yang sama.... nodemon 1.18.3 dan node 8.11.4 di Ubuntu 18.04 LTS. Juga mencoba rute konfigurasi nodemon dengan secara eksplisit menggunakan SIGHUP untuk mematikan proses dan menambahkan penundaan tambahan 2500ms..... Sayangnya, tidak ada sukacita....

Jika Anda meluncurkan nodemon melalui panel terminal WebStorm dan memiliki EADDRINUSE setelah memulai ulang IDE (atau mungkin hanya membuka kembali panel terminal), periksa apakah ada proses nodemon liar yang tersisa di daftar proses. Terjadi pada saya di Ubuntu 18.04.

Terima kasih atas petunjuknya @dchekanov . Saya mendapatkan masalah yang sama menggunakan vscode. Saya andal akan mendapatkan kegagalan EADDRINUSE setiap kali nodemon mencoba memulai ulang. Masuk akal jika ini menjadi semacam kondisi balapan antara dua proses nodemon.

Saya memiliki masalah yang sama.
nodemon -v 1.18.4
simpul -v v8.11.1
macOS Mojave versi 10.14
Terminal VsCode

Saya memiliki masalah yang sama. Anda dapat mengkloning repo ini: https://github.com/aecorredor/express-graphql-postgres-starter dan jalankan yarn lalu yarn start , buat perubahan, simpan, dan lihat kesalahannya . Perhatikan bahwa saya tidak menggunakan secara bersamaan. Saya baru saja menjalankan nodemon --exec babel-node index.js

Masalah yang sama. 1.18.6.
Berjalan di Docker di Ubuntu, node 10.11

Masalah yang sama di sini!

Itu membantu saya
yarn add --dev kexec

Saya baru-baru ini juga mendapat masalah yang sama ....
mungkin penyebab peningkatan buruh pelabuhan ... Saya tidak tahu mengapa ...
PENGGUNAAN EADRINUS...

Hai @justintien ,

Saya menghadapi beberapa kali masalah ini dengan nodemon masih saya ubah untuk paket pm2 ( http://pm2.keymetrics.io/ ), yang saya gunakan dalam produksi.

Tambahkan saja dan mulai dengan : pm2 start src/server.ts --watch --no-daemon
Jika Anda memiliki skrip ES6, Anda perlu menginstal modul TypeScript dan Anda dapat menambahkan ini di postinstall dengan:
"postinstall": "$(yarn bin)/pm2 install TypeScript"

Semoga bantuan ini.

Satu-satunya cara yang berhasil bagi saya adalah menambahkan "signal": "SIGTERM", ke nodemon.json .

Saya menggunakan Yarn, Docker, dan dari Alpine 10.

@lukebrewerton @MissAnichka @danielo515 @cormickjbrowne @ajones @sinonkt @nodediggity
Saya berhasil memperbaiki masalah ini.
Ini sebenarnya bukan nodemon, tapi babel-node!
npm i kexec -D akan menyelesaikan masalah

Penjelasan:
babel/babel#1062 (komentar)

Sunting:
Menjadi sedikit antusias dan tidak memperhitungkan kasus penggunaan lainnya.
TETAPI jika Anda menggunakan babel-node, ini akan memperbaiki masalah =D

Saya masih mengalami masalah yang sama dengan semua paket yang diperbarui ke versi terbaru. Tetapi dengan menginstal kexec , entah bagaimana berhasil. Tetapi saya tidak begitu yakin karena tampaknya paket kexec tidak dipelihara secara aktif.

npmi kexex tidak bekerja untuk saya, menggunakan 1.18.6

Teman-teman, ini adalah masalah tertutup dan tidak didukung. Jika ada bug yang Anda lihat di nodemon terbaru, laporkan masalah baru dengan petunjuk lengkap tentang cara mereplikasi.

Perhatikan bahwa saya sudah mengatakan ini sebelumnya tentang masalah yang sama.

Jika tidak, ketahuilah bahwa saya tidak memantau masalah tertutup.

saya mengalami masalah yang sama dan menyingkirkannya dengan menginstal versi 1.12.6 dengan perintah berikut: yarn global add nodemon@next dan kemudian Anda akan memilih dalam daftar versi 1.12.6 atau Anda dapat menjalankan yarn global add [email protected] terima kasih kepada: @remy untuk solusinya: https://github.com/remy/nodemon/issues/1025#issuecomment -351394591

buruh pelabuhan: simpul:10-alpine
simpul: v10.6.0
nodemon: v1.18.7

Saya menemukan alasan:

PID   USER     TIME   COMMAND
    1 root       0:00 /bin/sh -c npm i npm run dev -- -L
   16 root       0:00 sh
   22 root       0:00 npm
   32 root       0:00 sh -c nodemon ./src --exec babel-node "-L"
   33 root       0:01 node /app/node_modules/.bin/nodemon ./src --exec babel-node -L
   46 root       0:00 sh -c babel-node ./src
   47 root       0:00 node /app/node_modules/.bin/babel-node ./src
   53 root       0:00 /usr/local/bin/node /app/node_modules/babel-cli/lib/_babel-node ./src

# if watch change, restarting due to changes...
# after: it's didn't kill sub child -> 47 & 53
    1 root       0:00 /bin/sh -c npm i npm run dev -- -L
   16 root       0:00 sh
   22 root       0:00 npm
   32 root       0:00 sh -c nodemon ./src --exec babel-node "-L"
   33 root       0:15 node /app/node_modules/.bin/nodemon ./src --exec babel-node -L
   47 root       0:00 node /app/node_modules/.bin/babel-node ./src
   53 root       0:09 /usr/local/bin/node /app/node_modules/babel-cli/lib/_babel-node ./src
   78 root       0:00 sh -c babel-node ./src
   79 root       0:00 node /app/node_modules/.bin/babel-node ./src
   85 root       0:01 /usr/local/bin/node /app/node_modules/babel-cli/lib/_babel-node ./src

Saya sudah mencoba:

  • "signal": "SIGTERM", ke dalam nodemon.json.
  • npm i -D kexc (saya tahu babel-node pertama-tama akan menggunakan kexec, tapi itu melempar kesalahan)
app_1    | /app/node_modules/babel-cli/lib/babel-node.js:70
app_1    |     if (err.code !== "MODULE_NOT_FOUND") throw err;
app_1    |                                          ^
app_1    |
app_1    | Error: Error loading shared library /app/node_modules/kexec/build/Release/kexec.node: Exec format error
app_1    |     at Object.Module._extensions..node (internal/modules/cjs/loader.js:718:18)
app_1    |     at Module.load (internal/modules/cjs/loader.js:599:32)
app_1    |     at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
app_1    |     at Function.Module._load (internal/modules/cjs/loader.js:530:3)
app_1    |     at Module.require (internal/modules/cjs/loader.js:637:17)
app_1    |     at require (internal/modules/cjs/helpers.js:20:18)
app_1    |     at Object.<anonymous> (/app/node_modules/kexec/index.js:1:80)
app_1    |     at Module._compile (internal/modules/cjs/loader.js:689:30)
app_1    |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
app_1    |     at Module.load (internal/modules/cjs/loader.js:599:32)

@mohamed-badaoui
Dalam produksi, saya tidak menggunakan nodemon, itu hanya untuk pengembang ...
Saya menggunakan buruh pelabuhan dalam produksi. :merah:

Menghadapi masalah dengan [email protected] dan [email protected] ,
jadi harus memperbarui nodemone ke 1.18.8, sekarang berfungsi

Gunakan server TS dan Apollo.

Mengonfirmasi apa yang dikatakan @alienalien13 , saya menggunakan eksperimental Nodemon 1.18.9 dan NodeJS 11.4.0

berita!

Saya meningkatkan ke 1.18.9, itu berfungsi dengan baik !!

Bagus!!

@mohamed-badaoui

Terima kasih Bung ! terima kasih atas umpan baliknya

Untuk menguraikan lebih lanjut apa yang saya lakukan pada komentar saya sebelumnya - sinyal ( SIGUSR2 ) yang dikirim ke program saya tidak menyebabkannya keluar. Saya harus mengubah sinyal menjadi SIGHUP sebagai gantinya.

Saya membuat file bernama nodemon.json :

{
  "signal": "SIGHUP",
  "env": {
    "NODE_ENV": "development"
  },
  "ext": "ts",
  "exec": "ts-node --inspect ./lib/server.ts"
}

dan di package.json saya, karena saya menggunakan skrip npm, menjalankan nodemon sudah cukup:

"dev": "nodemon",

Sebagai solusi menambahkan "signal": "SIGHUP" berhasil untuk saya.

@Mutmatt nodemon v1.18.10 memberi tahu saya "Opsi tidak diketahui atau tidak terduga: --inspect".

@bennyn Anda dapat menambahkan perintah jenis package.json .

Misal nodemon.json

{
  "signal": "SIGHUP",
  "ext": "ts",
  "exec": "npm run serve",
  "watch": ["src"]
}

Jadi begitu! Jadi itu adalah bendera yang dihapus di ts-node . Maaf, saya buruk. 🙈

Masalah yang sama di sini
Error: listen EADDRINUSE
nodemon: 1.18.11
node: 10.14.1

semuanya tidak bekerja untuk saya :(
menggunakan ts-node + nodemon

saya menggunakan terminal visual studio, Ubuntu 18, salah satu caranya adalah keluar dari terminal, temukan proses dan matikan
mulai terminal baru di luar visual studio
jadi itu berhasil untuk saya

Ke atas

Periksa apakah Anda telah menginstal nodemon secara global. Menghapusnya memperbaiki masalah bagi saya.

Saya menggunakan pustaka dotenv untuk variabel lingkungan dan saya mengalami masalah yang sama. Bagi saya itu adalah file '.env'.

Itu seperti:
PORT=3000,

Jangan lupa untuk menghapus koma jika Anda menyalin tempel dari json.

ini yang memecahkan masalah bagi saya
npm cache clean -force

Opsi "autoAttachChildProcesses": true dipecahkan untuk saya

Opsi "autoAttachChildProcesses": benar dipecahkan untuk saya

Sudahkah Anda mengonfigurasinya di nodemon.json atau di mana opsi ini harus ditempatkan?

Saya mengalami masalah yang sama sekarang. Mencoba men-debug loop acara jika ada yang tersisa tetapi sepertinya tidak.

"nodemon": "^1.19.1",
node: v10.16.2
npm: 6.9.0

Adakah yang menemukan solusi yang tepat dan bersih untuk ini?

Di windows hentikan proses "node.exe Node.js: Server-side JavaScript".

Tambahkan di bagian bawah file js Anda, tempat Anda memulai server, letakkan ini:
process.on('SIGINT', () => { console.log("Bye bye!"); process.exit(); })

Terima kasih kembali!

Sekedar FYI jika ada yang masih berjuang, coba ini juga:
Saya menggunakan benang dan yarn cache clean melakukan keajaiban untuk saya.
Untuk pengguna npm, coba npm cache clean .

Jadi tidak ada cara untuk membunuh nodemon saat dijalankan ???

Baru saja diperbarui ke nodemon terbaru dan menabrak dari node 6 ke 10 bersama dengan peningkatan NPM dan mengalami ini:
"simpul": "^1.19.2",
simpul: 10.16.0
npm: 6.9.0

@doc82 masalah khusus ini sangat rumit dan jarang hal yang sama setiap kali.

Anda mungkin ingin mengangkat masalah baru dengan detail lengkap tentang cara mereplikasi, karena 9 kali dari 10 cara nodemon dijalankan pada proyek Anda yang menyebabkan "subproses menggantung".

Saya menghadapi kesalahan dengan yang berikut: -

[nodemon] memulai ulang karena perubahan...
[nodemon] mulai node server.js
event.js:183
lempar eh; // Acara 'kesalahan' yang tidak tertangani
^

Kesalahan: dengarkan EADDRINUSE :::3000
di Object._errnoException (util.js:1022:11)
di _exceptionWithHostPort (util.js:1044:20)
di Server.setupListenHandle [sebagai _listen2] (net.js:1367:14)
di listenInCluster (net.js:1408:12)
di Server.listen (net.js:1492:7)
di Obyek.(/home/dg/junesis/server.js:8:8)
di Module._compile (module.js:652:30)
di Object.Module._extensions..js (module.js:663:10)
di Module.load (module.js:565:32)
di tryModuleLoad (module.js:505:12)
di Function.Module._load (module.js:497:3)
di Function.Module.runMain (module.js:693:10)
saat startup (bootstrap_node.js:188:16)
di bootstrap_node.js:609:3
Aplikasi [nodemon] mogok - menunggu perubahan file sebelum memulai...
[nodemon] memulai ulang karena perubahan...
[nodemon] mulai node server.js
Mendengarkan di port 3000...
[nodemon] memulai ulang karena perubahan...
[nodemon] mulai node server.js
event.js:183
lempar eh; // Acara 'kesalahan' yang tidak tertangani
^

Kesalahan: dengarkan EADDRINUSE :::3000
di Object._errnoException (util.js:1022:11)
di _exceptionWithHostPort (util.js:1044:20)
di Server.setupListenHandle [sebagai _listen2] (net.js:1367:14)
di listenInCluster (net.js:1408:12)
di Server.listen (net.js:1492:7)
di Obyek.(/home/dg/junesis/server.js:8:8)
di Module._compile (module.js:652:30)
di Object.Module._extensions..js (module.js:663:10)
di Module.load (module.js:565:32)
di tryModuleLoad (module.js:505:12)
di Function.Module._load (module.js:497:3)
di Function.Module.runMain (module.js:693:10)
saat startup (bootstrap_node.js:188:16)
di bootstrap_node.js:609:3
Aplikasi [nodemon] mogok - menunggu perubahan file sebelum memulai...
[nodemon] memulai ulang karena perubahan...
[nodemon] mulai node server.js
Mendengarkan di port 3000...

Jika Anda mendapatkan kode seperti ini:

Kesalahan: Modul '/home/dg/junesis/node_modules/bcrypt/lib/binding/bcrypt_lib.node'
dikompilasi terhadap versi Node.js yang berbeda menggunakan
NODE_MODULE_VERSION 57. Versi Node.js ini membutuhkan
NODE_MODULE_VERSION 64. Coba kompilasi ulang atau instal ulang
modul (misalnya, menggunakan npm rebuild atau npm install ).
di Object.Module._extensions..node (internal/modules/cjs/loader.js:807:18)
di Module.load (internal/modules/cjs/loader.js:653:32)
di tryModuleLoad (internal/modules/cjs/loader.js:593:12)
di Function.Module._load (internal/modules/cjs/loader.js:585:3)
di Module.require (internal/modules/cjs/loader.js:692:17)
di membutuhkan (internal/modules/cjs/helpers.js:25:18)
di Obyek.(/home/dg/junesis/node_modules/bcrypt/bcrypt.js:6:16)
di Module._compile (internal/modules/cjs/loader.js:778:30)
di Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
di Module.load (internal/modules/cjs/loader.js:653:32)
di tryModuleLoad (internal/modules/cjs/loader.js:593:12)
di Function.Module._load (internal/modules/cjs/loader.js:585:3)
di Module.require (internal/modules/cjs/loader.js:692:17)
di membutuhkan (internal/modules/cjs/helpers.js:25:18)
di Obyek.(/home/dg/junesis/server/controller/userController.js:2:16)
di Module._compile (internal/modules/cjs/loader.js:778:30)
Aplikasi [nodemon] mogok - menunggu perubahan file sebelum memulai...

Anda perlu menjalankan perintah berikut:
rm -rf node_modules/bcrypt
instal npm

Namun, saya kebetulan memecahkan masalah menggunakan kode di bawah ini di file entri saya:
proses
// Menangani jalan keluar normal
.on('keluar', (kode) => {
nodemon.emit('keluar');
proses.keluar(kode);
})

// Handle CTRL+C
.on('SIGINT', () => {
    nodemon.emit('quit');
    process.exit(0);
});

Terima kasih kepada https://github.com/remy/nodemon/issues/1025#issuecomment -345361918

Di windows hentikan proses "node.exe Node.js: Server-side JavaScript".

Tambahkan di bagian bawah file js Anda, tempat Anda memulai server, letakkan ini:
process.on('SIGINT', () => { console.log("Bye bye!"); process.exit(); })

Terima kasih kembali!

Ini Membantu! Terima kasih!

Menambahkan process.on('SIGINT', () => { console.log("Bye bye!"); process.exit(); }) di akhir file js saya di distro berbasis debian dan membuat masalah hilang.

Saya mengalami masalah yang sama dan saya tidak 100% yakin mengapa, tetapi saya baru saja mengedit skrip awal saya untuk memasukkan perintah kill.

Ini akan berfungsi jika Anda hanya menggunakan mac/*nix untuk pengembangan seperti saya, ubah skrip mulai Anda untuk mematikan apa pun yang menggunakan port saat mulai seperti:

"scripts": {
    "start": "npm run kill & node ./node_modules/.bin/nodemon ./bin/www",
    "kill": "kill $(lsof -t -i:3000) | exit 0",
}

3000 adalah port yang Anda gunakan. | exit 0 membungkam kesalahan jika port tidak digunakan. Perintah start sekarang npm run kill & yang mematikan dan menunggu, kemudian node ./node_modules/.bin/nodemon ./bin/www dapat diganti dengan apa pun yang biasa Anda gunakan untuk memulai aplikasi Anda.

Saya tidak pernah memiliki masalah ini sebelumnya tetapi mulai mendapatkannya sekarang secara tiba-tiba. Ubuntu 18.04 "nodemon": "^2.0.2" , versi simpul 13.7.0 .

Saya tidak pernah memiliki masalah ini sebelumnya tetapi mulai mendapatkannya sekarang secara tiba-tiba. Ubuntu 18.04 "nodemon": "^2.0.2" , versi simpul 13.7.0 .

Sama di sini pada versi kedua alat. Tampaknya masalah ini muncul secara berkala dari berbagai penyebab.

Karena utas ini tampaknya merupakan sumber info terbaik, saya pikir itu harus dibuka kembali.

Tunggu, tunggu, nodemon masih berjalan setelah saya mematikan prosesnya! Saya perhatikan setelah saya mengubah file server, dan tiba-tiba pid muncul lagi. Saya menjalankan nodemon secara bersamaan, jadi saya tidak tahu apakah itu ada bedanya.

Saya telah mengalami masalah itu selama seminggu terakhir pada proyek Hapi baru. 4 kali dari 5, saya mendapatkan kesalahan EADDRINUSE ketika nodemon memuat ulang.

Tetapi saya tidak dapat mereproduksi kesalahan itu ketika bekerja dengan proyek yang lebih lama, menggunakan versi Hapi yang lebih lama dan versi nodemon yang sama ( 2.0.2 ). Saya juga tidak dapat mereproduksinya saat membuat proyek dari awal dengan versi Hapi & nodemon yang sama dengan proyek baru saya. Saya akan mencoba menyelidiki penyebabnya, tetapi itu bukan Hapi atau nodemon itu sendiri.

Saya tidak pernah memiliki masalah ini sebelumnya tetapi mulai mendapatkannya sekarang secara tiba-tiba. Ubuntu 18.04 "nodemon": "^2.0.2" , versi simpul 13.7.0 .

Sama di sini pada versi kedua alat. Tampaknya masalah ini muncul secara berkala dari berbagai penyebab.

Karena utas ini tampaknya merupakan sumber info terbaik, saya pikir itu harus dibuka kembali.

Yap, dengan @Ratstail91 - harus dibuka kembali.

Hai,

Saya mendapat masalah yang sama di sini, mulai hari ini.
Saya menggunakan nodemon dengan ts-node (proyek dikembangkan menggunakan TypeScript)

Saya mencoba semuanya di bawah ini dan TIDAK ADA yang berhasil:

  1. Instal ulang node_modules
  2. Ganti versi node dari 10 ke 12 dan 13 dan tag alpine juga.
  3. Beralih dari nodemon 2.0.2 ke 1.19
  4. Pangkas volume buruh pelabuhan, jaringan, wadah, gambar
  5. Membangun kembali gambar dari awal.
  6. Bunuh semua proses simpul dan semua yang berjalan pada 3000 menggunakan semua jenis teknik: lsof, pkill, kill, killall ...
  7. Mengubah port dari 3000 ke yang lain
  8. Mengubah host dari 0.0.0.0 ke yang lain
  9. Restart mesin saya (Situasi solusi terakhir)

Lucunya saya update nodemon kemarin...
Jika kalian punya solusi, saya masih di sini.

Kesalahan pesan adalah =>

yume-api | Error: listen EADDRINUSE: address already in use "3000" yume-api | at Server.setupListenHandle [as _listen2] (net.js:1263:19) yume-api | at listenInCluster (net.js:1328:12) yume-api | at Server.listen (net.js:1426:5) yume-api | at Function.listen (/usr/src/yume-api/node_modules/express/lib/application.js:618:24) yume-api | at Object.<anonymous> (/usr/src/yume-api/src/server.ts:35:5) yume-api | at Module._compile (internal/modules/cjs/loader.js:778:30) yume-api | at Module.m._compile (/usr/src/yume-api/node_modules/ts-node/src/index.ts:814:23) yume-api | at Module._extensions..js (internal/modules/cjs/loader.js:789:10) yume-api | at Object.require.extensions.(anonymous function) [as .ts] (/usr/src/yume-api/node_modules/ts-node/src/index.ts:817:12) yume-api | at Module.load (internal/modules/cjs/loader.js:653:32) yume-api | at tryModuleLoad (internal/modules/cjs/loader.js:593:12) yume-api | at Function.Module._load (internal/modules/cjs/loader.js:585:3) yume-api | at Function.Module.runMain (internal/modules/cjs/loader.js:831:12) yume-api | at main (/usr/src/yume-api/node_modules/ts-node/src/bin.ts:226:14) yume-api | at Object.<anonymous> (/usr/src/yume-api/node_modules/ts-node/src/bin.ts:485:3) yume-api | at Module._compile (internal/modules/cjs/loader.js:778:30) yume-api | at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10) yume-api | at Module.load (internal/modules/cjs/loader.js:653:32) yume-api | at tryModuleLoad (internal/modules/cjs/loader.js:593:12) yume-api | at Function.Module._load (internal/modules/cjs/loader.js:585:3) yume-api | at Function.Module.runMain (internal/modules/cjs/loader.js:831:12) yume-api | at startup (internal/bootstrap/node.js:283:19) yume-api | [nodemon] app crashed - waiting for file changes before starting...

Dan omong-omong, saya memiliki file soket aneh "3000" yang dibuat di direktori proyek, ada petunjuk dari mana asalnya?

Saya tidak pernah memiliki masalah ini sebelumnya tetapi mulai mendapatkannya sekarang secara tiba-tiba. Ubuntu 18.04 "nodemon": "^2.0.2" , versi simpul 13.7.0 .

Sama di sini pada versi kedua alat. Tampaknya masalah ini muncul secara berkala dari berbagai penyebab.

Karena utas ini tampaknya merupakan sumber info terbaik, saya pikir itu harus dibuka kembali.

Saya juga menghadapi masalah ini pada node dari Docker Official Images .
Namun, hanya wadah buruh pelabuhan yang berjalan pada Mac OS , tetapi tidak untuk Windows 10 Host.

Saya juga menghadapi masalah yang sama, saya harus menyimpan proyek 3/4 kali berturut-turut untuk membuatnya berfungsi.

Saya mengunci masalah ini. Itu didasarkan pada kode berusia 3 tahun, memiliki penggabungan pr dan memperbaiki sumber masalahnya.

Orang-orang yang memposting baru-baru ini mengalami gejala yang sama tetapi sumbernya tidak sama (ditambah tidak pernah ada info untuk ditiru).

Akan membutuhkan pr untuk memperbaiki masalah _new_ ini. Terima kasih.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat