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.compile
app.js를 회피 하고 있지만 node.js 전역에 대한 실마리는 없습니다.
답변
최신의 대안 supervisor
은 nodemon
다음과 같습니다.
node.js 응용 프로그램의 변경 사항을 모니터링하고 서버를 자동으로 다시 시작하여 개발에 적합
사용하려면 nodemon
:
$ npm install nodemon -g
$ nodemon app.js
답변
노드 감독자는 굉장하다
저장시 다시 시작하는 사용법 :
npm 설치 관리자 -g 감독자 app.js
답변
나는 간단한 방법을 찾았다.
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.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
이지만 지금 노력하고 있습니다.
