यहां एक और समाधान है जो पिछले उत्तरों से विचारों को मिलाता है। मंच की स्वतंत्रता के बारे में चिंता को संबोधित करते हुए यह "मार प्रक्रिया" दृष्टिकोण लेता है।
यह सर्वर प्रोसेस ट्री को मारने के लिए ट्री-किल पैकेज पर निर्भर करता है । मैंने अपनी परियोजनाओं में आवश्यक पूरी प्रक्रिया के पेड़ को मारना पाया क्योंकि कुछ उपकरण (जैसे babel-node
) बच्चे की प्रक्रियाओं को स्पॉन करते हैं। यदि आपको केवल एक प्रक्रिया को मारने की आवश्यकता है, तो आप बिल्ट-इन process.kill()
विधि से ट्री-किल को बदल सकते हैं ।
समाधान इस प्रकार है ( spawn()
अपने सर्वर को चलाने के लिए विशिष्ट नुस्खा को प्रतिबिंबित करने के लिए पहले दो तर्कों को संशोधित किया जाना चाहिए):
निर्माण / शुरू 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'
})
}
निर्माण / रोकने के server.js
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
तुरंत वापस आ जाएगा और सर्वर बंद होने तक ब्लॉक नहीं करेगा)। यदि आप पारंपरिक ब्लॉकिंग व्यवहार को पसंद करते हैं, तो बस options.detached
तर्क को spawn()
और कॉल को हटा दें child.unref()
।