IT TIP

다른 Node.js 스크립트 내에서 Node.js 스크립트를 실행하는 방법

itqueen 2021. 1. 8. 22:40
반응형

다른 Node.js 스크립트 내에서 Node.js 스크립트를 실행하는 방법


라는 독립 실행 형 노드 스크립트가 compile.js있습니다. 작은 Express 앱의 기본 폴더 안에 있습니다.

때때로 compile.js명령 줄에서 스크립트를 실행합니다 . 다른 시나리오에서는 Express 앱에서 실행하기를 원합니다.

두 스크립트 모두 package.json. Compile.js지금은 메소드를 내 보내지 않습니다.

이 파일을로드하고 실행하는 가장 좋은 방법은 무엇입니까? 나는 살펴 보았다 eval(), vm.RunInNewContext그리고 require,하지만 확실 올바른 접근 방식은 무엇인가.

도움을 주셔서 감사합니다 !!


하위 프로세스를 사용하여 스크립트를 실행하고 종료 및 오류 이벤트를 수신하여 프로세스가 완료되거나 오류가 발생하는시기를 알 수 있습니다 (경우에 따라 종료 이벤트가 발생하지 않을 수 있음). 이 메서드는 호출하려는 타사 스크립트와 같이 자식 프로세스로 실행되도록 명시 적으로 설계되지 않은 경우에도 모든 비동기 스크립트로 작업 할 수있는 이점이 있습니다. 예:

var childProcess = require('child_process');

function runScript(scriptPath, callback) {

    // keep track of whether callback has been invoked to prevent multiple invocations
    var invoked = false;

    var process = childProcess.fork(scriptPath);

    // listen for errors as they may prevent the exit event from firing
    process.on('error', function (err) {
        if (invoked) return;
        invoked = true;
        callback(err);
    });

    // execute the callback once the process has finished running
    process.on('exit', function (code) {
        if (invoked) return;
        invoked = true;
        var err = code === 0 ? null : new Error('exit code ' + code);
        callback(err);
    });

}

// Now we can run a script and invoke a callback when complete, e.g.
runScript('./some-script.js', function (err) {
    if (err) throw err;
    console.log('finished running some-script.js');
});

보안 문제가있을 수있는 환경에서 타사 스크립트를 실행하는 경우 샌드 박스 vm 컨텍스트에서 스크립트를 실행하는 것이 더 나을 수 있습니다.


자식 프로세스를 포크하는 것이 유용 할 수 있습니다. http://nodejs.org/api/child_process.html을 참조 하십시오.

링크의 예에서 :

var cp = require('child_process');

var n = cp.fork(__dirname + '/sub.js');

n.on('message', function(m) {
  console.log('PARENT got message:', m);
});

n.send({ hello: 'world' });

이제 자식 프로세스는 다음과 같이됩니다 ...

process.on('message', function(m) {
  console.log('CHILD got message:', m);
});

process.send({ foo: 'bar' });

But to do simple tasks I think that creating a module that extends the events.EventEmitter class will do... http://nodejs.org/api/events.html

ReferenceURL : https://stackoverflow.com/questions/22646996/how-do-i-run-a-node-js-script-from-within-another-node-js-script

반응형