পূর্ববর্তী উত্তরগুলি থেকে ধারণাগুলি মিশ্রিত করে এমন আরও একটি সমাধান এখানে। প্ল্যাটফর্মের স্বাধীনতা সম্পর্কিত উদ্বেগকে সম্বোধন করার সময় এটি "কিল প্রক্রিয়া" পদ্ধতির প্রয়োজন।
এটি সার্ভার প্রক্রিয়া ট্রি হত্যার জন্য ট্রি-কিল প্যাকেজের উপর নির্ভর করে । আমি আমার প্রকল্পগুলিতে প্রয়োজনীয় পুরো প্রক্রিয়া গাছটিকে হত্যা করতে পেয়েছি কারণ কিছু সরঞ্জাম (উদাঃ babel-node
) শিশু প্রক্রিয়াগুলিকে স্প্যান করে। আপনার যদি কেবল একটি একক প্রক্রিয়া মারতে হয় তবে আপনি বিল্ট-ইন process.kill()
পদ্ধতিতে ট্রি-কিল প্রতিস্থাপন করতে পারেন ।
সমাধানটি অনুসরণ করে ( spawn()
আপনার সার্ভার চালানোর জন্য নির্দিষ্ট রেসিপিটি প্রতিবিম্বিত করার জন্য প্রথম দুটি যুক্তি সংশোধন করা উচিত):
build / start-server.js
import { spawn } from 'child_process'
import fs from 'fs'
const child = spawn('node', [
'dist/server.js'
], {
detached: true,
stdio: 'ignore'
})
child.unref()
if (typeof child.pid !== 'undefined') {
fs.writeFileSync('.server.pid', child.pid, {
encoding: 'utf8'
})
}
বিল্ড / স্টপ-সার্ভার.জেএস
import fs from 'fs'
import kill from 'tree-kill'
const serverPid = fs.readFileSync('.server.pid', {
encoding: 'utf8'
})
fs.unlinkSync('.server.pid')
kill(serverPid)
package.json
"scripts": {
"start": "babel-node build/start-server.js",
"stop": "babel-node build/stop-server.js"
}
নোট করুন যে এই সমাধানটি সার্ভার থেকে প্রারম্ভিক স্ক্রিপ্টটিকে পৃথক করে (যেমন npm start
সার্ভারটি বন্ধ না হওয়া অবধি অবিলম্বে ফিরে আসবে এবং অবরুদ্ধ হবে না)। আপনি যদি theতিহ্যবাহী অবরুদ্ধ আচরণ পছন্দ করেন তবে কেবল options.detached
যুক্তি spawn()
এবং কলটি সরিয়ে দিন child.unref()
।