[javascript] Node.js에서 파일을 자동으로 다시로드하는 방법?

Node.js에서 파일 자동 다시로드를 구현하는 방법에 대한 아이디어가 있습니까? 파일을 변경할 때마다 서버를 다시 시작하는 데 지쳤습니다. 분명히 Node.js의 require()함수는 파일이 이미 필요한 경우 파일을 다시로드하지 않으므로 다음과 같이해야합니다.

var sys     = require('sys'),
    http    = require('http'),
    posix   = require('posix'),
    json    = require('./json');

var script_name = '/some/path/to/app.js';
this.app = require('./app').app;

process.watchFile(script_name, function(curr, prev){
    posix.cat(script_name).addCallback(function(content){
        process.compile( content, script_name );
    });
});

http.createServer(this.app).listen( 8080 );

그리고 app.js 파일에는 다음이 있습니다.

var file = require('./file');
this.app = function(req, res) {
    file.serveFile( req, res, 'file.js');
}

그러나 이것은 작동하지 않습니다 process.compile().’require ‘가 정의되어 있지 않다는 문장 에서 오류가 발생합니다 . process.compileapp.js를 회피 하고 있지만 node.js 전역에 대한 실마리는 없습니다.



답변

최신의 대안 supervisornodemon다음과 같습니다.

node.js 응용 프로그램의 변경 사항을 모니터링하고 서버를 자동으로 다시 시작하여 개발에 적합

사용하려면 nodemon:

$ npm install nodemon -g
$ nodemon app.js


답변

노드 감독자는 굉장하다

저장시 다시 시작하는 사용법 :

npm 설치 관리자 -g
감독자 app.js

이삭에 의해 – http://github.com/isaacs/node-supervisor


답변

나는 간단한 방법을 찾았다.

delete require.cache['/home/shimin/test2.js']


답변

누군가 여전히이 질문에 와서 표준 모듈 만 사용하여 해결하려는 경우 간단한 예를 들었습니다.

var process = require('process');
var cp = require('child_process');
var fs = require('fs');

var server = cp.fork('server.js');
console.log('Server started');

fs.watchFile('server.js', function (event, filename) {
    server.kill();
    console.log('Server stopped');
    server = cp.fork('server.js');
    console.log('Server started');
});

process.on('SIGINT', function () {
    server.kill();
    fs.unwatchFile('server.js');
    process.exit();
});

이 예제는 하나의 파일 (server.js)에만 해당되지만 파일 배열을 사용하거나 모든 파일 이름을 가져 오는 for 루프를 사용하거나 디렉토리를 감시하여 여러 파일에 적용 할 수 있습니다.

fs.watch('./', function (event, filename) { // sub directory changes are not seen
    console.log(`restart server`);
    server.kill();
    server = cp.fork('server.js');
})

이 코드는 Node.js 0.8 API 용으로 만들어졌으며 특정 요구에 맞지 않지만 간단한 앱에서는 작동합니다.

업데이트 :이 기능은 내 모듈 simpleR , GitHub repo 에서 구현됩니다.


답변

nodemon 은 Google 검색에서 처음 나타 났으며 트릭을 수행하는 것 같습니다.

npm install nodemon -g
cd whatever_dir_holds_my_app
nodemon app.js


답변

설치할 수있는 Node-Supervisor가 있습니다

npm install supervisor

참조 http://github.com/isaacs/node-supervisor를


답변

편집 : 내 대답은 더 이상 사용되지 않습니다. Node.js는 매우 빠르게 변화하는 기술입니다.

또한 모듈을 다시로드하는 것에 대해 궁금했습니다 . node.js를 수정하고 nalply / node의 Github에 소스를 게시했습니다 . 유일한 차이점은 기능 require입니다. 선택적인 두 번째 인수가 reload있습니다.

require(url, reload)

app.js현재 디렉토리에서 다시로드하려면

app = require("./app", true);

이와 같은 것을 작성하면 자동 재로드 가 있습니다 .

process.watchFile(script_name, function(curr, prev) {
    module = reload(script_name, true);
});

내가 볼 수있는 유일한 문제는 variable module이지만 지금 노력하고 있습니다.