34 lines
		
	
	
		
			904 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			904 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict'
 | |
| 
 | |
| const childProcess = require('child_process')
 | |
|     , childModule  = require.resolve('./child/index')
 | |
| 
 | |
| 
 | |
| function fork (forkModule, workerOptions) {
 | |
|   // suppress --debug / --inspect flags while preserving others (like --harmony)
 | |
|   let filteredArgs = process.execArgv.filter(function (v) {
 | |
|         return !(/^--(debug|inspect)/).test(v)
 | |
|       })
 | |
|     , options       = Object.assign({
 | |
|           execArgv : filteredArgs
 | |
|         , env      : process.env
 | |
|         , cwd      : process.cwd()
 | |
|       }, workerOptions)
 | |
|     , child         = childProcess.fork(childModule, process.argv, options)
 | |
| 
 | |
|   child.on('error', function() {
 | |
|     // this *should* be picked up by onExit and the operation requeued
 | |
|   })
 | |
| 
 | |
|   child.send({ owner: 'farm', module: forkModule })
 | |
| 
 | |
|   // return a send() function for this child
 | |
|   return {
 | |
|       send  : child.send.bind(child)
 | |
|     , child : child
 | |
|   }
 | |
| }
 | |
| 
 | |
| 
 | |
| module.exports = fork
 |