Дело в том, что когда вы require
сценарий, под капотом сценарий run и экспорт извлекается в конце.То, что вы видите, полностью логично - в основном это четыре процесса вместо одного, когда вы запускаете $ node parent.js
- Parent, созданный
$ node parent.js
- Первый, созданный
fork(firstScript)
- Второй, созданный
fork(secondScript)
- другой Первый, созданный
require('./first.js')
Скажите, нужно ли мне добавитьдерево процессов ascii art, отображающее обмен сообщениями и создание процесса, или, если все в порядке!
Ах, это имеет смысл!Но ... как я могу экспортировать файл, не выполняя части скрипта, которые создают перехватчики IPC?
Обычный шаблон проектирования в JavaScript (узел или сеть) имеет только Отключение файлов, кроме одного .Таким образом, все файлы только импортируют / экспортируют классы и константы, но есть только один главный файл , который фактически запускает всю программу, ссылаясь на весь интеллект в другом месте исходного кода.В основном это:
// hello.js
module.exports = () => console.log('hello world');
// main.js
const hello = require('./hello');
hello();
Всегда лучше учесть ваш код так, чтобы упростить вашу работу, но если вы не можете, вы всегда можете предотвратить запуск некоторого кода в зависимости от того, является ли сценарий требуется или , называемое , как объяснено здесь .В вашем случае, переписав first.js
следующим образом:
'use strict';
class First {
}
// called only if invoked as script
if (require.main==module) {
process.on('message', async (message) => {
console.log('first received message: ' + message);
process.send(message);
});
}
module.exports = {First};
Дает ожидаемый результат, который вы описали при запуске node parent.js
.