Require ('child_process') => не может найти Require / child_process + launch .bat

0

Это было 3 дня, когда я ищу на форумах способ сделать работу своей программой, и она все еще не работает...

Я работаю над своим первым проектом AngularJS, и мне нужно запустить внешнюю программу, когда пользователь нажимает на изображение.

У меня есть модуль с именем tool-list, а в моем tool-list.component.ts я экспортирую класс под именем ToolListComponent. В этом классе у меня есть функция запуска моей внешней программы.

    launchtool(){
      alert("I'm trying to launch test.bat!");
      const spawn = require('child_process').spawn;
      //const bat = spawn('start', ['./TrashCode/test.bat']);
      //const bat = spawn('cmd.exe', ['start', './TrashCode/test.bat']);
      //var exec = child_process.spawn('start', './TrashCode/test.bat', {detached: true});
      alert("It works!");
    }

В комментариях я держу несколько строк, которые я пробовал.

Моя проблема: когда я использую require => ошибка TS2304 не может найти имя "require". Или просто child_process => ошибка не может найти модуль 'child_process'.

Я определенно не первый, у кого такая проблема, но ни одно из решений не работало для меня (импорт, импорт * as, require, declare function require (имя: строка), var require: any; [...]).

Возможно, решение очевидно для некоторых из вас; Я рассматриваю свои уроки в этом случае.

Сервер и клиент будут на стороне клиента, я просто использую веб как HMI

  • 0
    Вы хотите, чтобы child_process запускался на стороне клиента или сервера? child_process и require являются частью node.js, но не клиента.
  • 0
    Любой из них будет на клиенте. Я знаю это, поэтому я хочу запустить программу с сервером
Теги:
require
child-process

1 ответ

0
Лучший ответ

Вы не можете запускать дочерний процесс через веб-браузер, если ваше приложение не работает в контейнере приложений для настольных компьютеров, таком как Electron (что делает модули Node доступными в пределах его веб-времени). Было бы ужасно неуверенно позволять браузерам выполнять сценарии оболочки - представьте, если всплывающее окно могло загрузить .bat и сразу же запустить его на вашем компьютере...

Тем не менее, если вы хотите, чтобы командный файл запускался на сервере и просто запускался клиентом, это вполне осуществимо - просто вызовите child_process.spawn() в ответ на вызов REST.

  • 0
    @Ryusekai - тогда вам лучше всего использовать что-то вроде Express для создания простого REST API с обработчиком маршрута, который содержит код для порождения дочернего процесса. Затем вы можете использовать встроенную службу Angular $http для удаленного вызова этого API из вашего приложения.
  • 0
    Да, конечно! Я забыл уточнить, что я хотел запустить его со стороны сервера. Вы имеете в виду, что я пытался запустить его на стороне клиента? => Я проверю, что такое Express, но я не решил использовать AngluarJS
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню