Tôi đang cố gắng thiết lập máy chủ nodejs của riêng mình, nhưng tôi đang gặp sự cố. Tôi không thể tìm ra cách để xem các thay đổi đối với ứng dụng của mình mà không cần khởi động lại nó. Có cách nào để chỉnh sửa ứng dụng và xem các thay đổi trực tiếp với node.js không?Làm cách nào tôi có thể chỉnh sửa trên các tệp máy chủ của mình mà không cần khởi động lại nodej khi tôi muốn xem các thay đổi?
Trả lời
Khám phá Node-Supervisor. Bạn có thể cung cấp cho nó một bộ sưu tập các tập tin để xem các thay đổi, và nó khởi động lại máy chủ của bạn nếu có bất kỳ thay đổi nào. Nó cũng khởi động lại nó nếu nó bị treo vì một số lý do khác.
Mã "Hoán đổi nóng" không được kích hoạt trong NodeJS vì rất dễ vô tình bị rò rỉ bộ nhớ hoặc nhiều bản sao của các đối tượng không bị thu gom rác. Node là về làm cho các chương trình của bạn vô tình nhanh chóng, không vô tình bị rò rỉ.
EDIT, 7 năm sau khi thực tế: Tuyên bố từ chối trách nhiệm, tôi đã viết giám sát nút, nhưng đã giao dự án cho người bảo trì khác trước khi viết câu trả lời này.
Điều đó thật tuyệt vời. – PixMach
nó sẽ là tốt để trao đổi nóng trong phát triển, sau khi khởi động lại máy chủ nó sẽ được OK, đó không phải để nói nó sẽ được dễ dàng để thực hiện –
Liên kết bạn đã cung cấp dường như cho thấy rằng đây là dự án của bạn. Bạn có thể làm rõ sự tham gia của mình và thêm tuyên bố từ chối trách nhiệm thích hợp (nếu thích hợp) không? – HPierce
nốt là một bộ nạp mô-đun cho Node để xử lý tự động tải lại các module mà không khởi động lại máy chủ (vì đó là những gì bạn đã hỏi về):
http://github.com/kriszyp/nodules
nốt không phụ thuộc thông minh theo dõi quá các nhà máy mô-đun thích hợp được thực hiện lại để duy trì các tham chiếu chính xác khi các mô-đun được tải lại mà không yêu cầu khởi động lại đầy đủ.
whoa một câu trả lời thực tế cho OP! upvoted –
@Kris Zyp nó là một giải pháp tuyệt vời nhưng nó vẫn tích cực duy trì? –
Sử dụng này: https://github.com/remy/nodemon
Chỉ cần chạy ứng dụng của bạn như thế này: nodemon yourApp.js
Nodemon khởi động lại máy chủ mọi lúc và chỉ có nghĩa là được sử dụng để phát triển. Hoàn toàn trái ngược với những gì Robert đang hỏi! :) –
@jasdeepkhalsa câu trả lời được chấp nhận cũng cho thấy rằng nó khởi động lại máy chủ. – Loolooii
yep và câu trả lời được chấp nhận là câu trả lời sai cho OP :) –
gì “Sống Mã hóa”?
Về bản chất, đó là cách để thay đổi chương trình trong khi nó chạy, mà không cần khởi động lại nó. Mục tiêu, tuy nhiên, là kết thúc với một chương trình mà hoạt động đúng khi chúng tôi bắt đầu lại. Để hữu ích, nó giúp có trình chỉnh sửa có thể được tùy chỉnh để gửi mã tới máy chủ.
Hãy xem: http://lisperator.net/blog/livenode-live-code-your-nodejs-application/
Nên có một số tập trung vào những gì đang xảy ra, thay vì chỉ shotgunning module tại OP. Ngoài ra, chúng tôi không biết rằng các tệp mà anh ấy đang chỉnh sửa là tất cả các mô-đun JS hoặc tất cả chúng đều sử dụng cuộc gọi "yêu cầu". Thực hiện các kịch bản sau đây với một hạt muối, chúng chỉ có nghĩa là để mô tả những gì đang xảy ra để bạn biết cách làm việc với nó.
Mã của bạn đã được nạp và máy chủ đang chạy với nó
SOLUTION Bạn cần phải có một cách để nói với máy chủ gì mã đã thay đổi để nó có thể tải lại nó . Bạn có thể có một thiết bị đầu cuối được thiết lập để nhận tín hiệu, lệnh trên dòng lệnh hoặc yêu cầu thông qua tcp/http sẽ cho biết tệp nào đã thay đổi và điểm cuối sẽ tải lại nó.
//using Express var fs = require('fs'); app.get('reload/:file', function (req, res) { fs.readfile(req.params.file, function (err, buffer) { //do stuff... }); });
Mã của bạn có thể có "yêu cầu" các cuộc gọi trong nó mà tải và nới lưu trữ module
SOLUTION vì những module được lưu trữ bởi yêu cầu, sau khi giải pháp trước , bạn sẽ cần một dòng trong điểm cuối để xóa tham chiếu đó
var moduleName = req.params.file; delete require.cache[moduleName]; require('./' + moduleName);
Có rất nhiều số khó khăn để có được vào đằng sau tất cả những điều này, nhưng hy vọng bạn có một ý tưởng tốt hơn về những gì đang xảy ra và tại sao.
Tôi nghĩ rằng node-inspector là đặt cược tốt nhất của bạn.
Tương tự như cách bạn có thể Live Edit Client side JS code trong công cụ Chrome Dev, công cụ này sử dụng Giao diện công cụ dành cho Chrome (Blink) Dev để cung cấp chỉnh sửa mã trực tiếp.
https://github.com/node-inspector/node-inspector/wiki/LiveEdit
nếu bạn muốn tải lại một mô-đun mà không cần khởi động lại quá trình nút, bạn có thể làm điều này bằng sự giúp đỡ của các watchFile chức năng trong fs mô-đun và bộ nhớ cache thanh toán bù trừ tính năng của yêu cầu:
phép nói rằng bạn nạp một mô-đun với một đơn giản yêu cầu:
var my_module = require('./my_module');
Để xem tệp đó và tải lại khi cập nhật, hãy thêm thông tin sau vào vị trí thuận tiện trong mã của bạn.
fs.watchFile(require.resolve('./my_module'), function() {
console.log("Module changed, reloading...");
delete require.cache[require.resolve('./my_module')]
my_module = require('./my_module');
});
Nếu mô-đun của bạn là cần thiết trong nhiều file hoạt động này sẽ không ảnh hưởng đến nhiệm vụ khác, vì vậy việc giữ mô-đun trong một biến toàn cầu và sử dụng nó, nơi nó là cần thiết từ toàn cầu chứ không phải là đòi hỏi nhiều lần là một lựa chọn. Vì vậy, mã ở trên sẽ như sau:
global.my_module = require ('./my_module');
//..
fs.watchFile(require.resolve('./my_module'), function() {
console.log("Module changed, reloading...");
delete require.cache[require.resolve('./my_module')]
global.my_module = require('./my_module');
});
Bạn cũng có thể sử dụng công cụ PM2. Đó là một công cụ xử lý sản xuất tiên tiến cho nút js. http://pm2.keymetrics.io/
Một giải pháp trực tiếp đơn giản với tài liệu tham khảo cho tất cả các câu trả lời có sẵn ở đây:
tài liệu Node nói rằng fs.watch là hiệu quả hơn fs.watchFile & nó có thể xem toàn bộ thư mục.
(tôi chỉ mới bắt đầu sử dụng này, vì vậy không thực sự chắc chắn cho dù có bất kỳ hạn chế)
fs.watch("lib", (event_type, file_name) => {
console.log("Deleting Require cache for " + file_name);
delete require.cache[ require.resolve("./lib/" + file_name)];
});
- 1. nginx - Tôi có thể thêm máy chủ ảo mới mà không cần khởi động lại máy chủ không?
- 2. làm cách nào để tôi có một đồng đội khởi động lại máy chủ heroku từ máy của mình
- 3. Có thể tải lại chế độ xem mà không cần khởi động lại Django không?
- 4. Tôi làm cách nào để có các tệp nguồn tải lại mod_perl khi thay đổi?
- 5. Tôi có cần khởi động lại Apache sau khi thay đổi tệp php.ini không?
- 6. Python + Tornado Khởi động lại sau khi chỉnh sửa các tệp
- 7. Tôi có thể cài đặt plugin mà không cần khởi động lại trình duyệt và máy
- 8. Làm thế nào tôi có thể kiểm tra khóa ssh của mình tại địa phương mà không cần máy chủ
- 9. Tại sao tôi không thể truy cập các tệp javascript của mình từ Expressjs/Nodej?
- 10. làm cách nào tôi có thể thực hiện "git pull" tự động khi máy chủ của tôi khởi động
- 11. Tôi có hai tệp machine.config trên máy chủ của mình, tôi sẽ chỉnh sửa tệp nào và cách xác minh chúng đang được sử dụng?
- 12. khởi động lại ứng dụng mà không cần khởi động lại máy chủ?
- 13. Nhận biết các thay đổi về thuộc tính của tệp mà không cần khởi động lại Tomcat
- 14. Tôi làm cách nào để chia sẻ một dịch vụ giữa các hoạt động mà không cần khởi động lại?
- 15. Tôi có thể sử dụng main() để khởi động lại ứng dụng của mình không?
- 16. Git: Làm thế nào tôi có thể sửa đổi cam kết của máy chủ?
- 17. Làm cách nào để ngăn Emacs tự động chỉnh sửa tệp khởi động của tôi?
- 18. php.ini đặt lại trên máy chủ MAMP khởi động lại
- 19. Tôi có thể chèn các nút vào một TreeView trong AfterLabelEdit mà không cần chỉnh sửa chúng không?
- 20. Tôi làm cách nào để trình duyệt có thể xem các thay đổi CSS và Javascript?
- 21. Triển khai các tệp lớp java mà không cần khởi động lại JBoss
- 22. Tôi có thể Chỉnh sửa Chủ đề Google Chrome không?
- 23. Làm cách nào tôi có thể chỉnh sửa chương trình tệp máy chủ trong Windows 7/Server 2008?
- 24. Tôi cần làm theo các bước nào để có thể viết và chỉnh sửa chương trình python trên điện thoại Android của mình?
- 25. Nội địa hóa ASP.NET: Thay đổi tài nguyên mà không cần khởi động lại ứng dụng?
- 26. Làm cách nào để xóa bộ nhớ cache truy vấn Coldfusion mà không cần khởi động lại máy chủ?
- 27. Làm thế nào để thay đổi đón Nodejs thay vì khởi động lại máy chủ mỗi lần?
- 28. Không thể lấy kịch bản Upstart của tôi để chạy Node.js và Forever khi máy chủ khởi động lại
- 29. mang lại các điều khiển được nạp lần cuối khi tôi khởi động lại máy
- 30. Làm cách nào để phát hiện xem máy chủ Windows có khả dụng sau khi khởi động lại không?
Một kịch bản tốt hơn là sử dụng hai máy chủ như proxy, proxy server rơi xuống thứ yếu được xử lý bởi nginx khi người đầu tiên được ẩn (504error) (với nginx bạn có thể chỉnh sửa cấu hình với tải lại/không khởi động lại), theo cách này tất cả các yêu cầu được chuyển sang máy chủ thứ cấp sau khi dừng máy chủ đầu tiên, máy chủ thứ hai được sử dụng làm bản sao lưu để cập nhật tệp tại máy chủ đầu tiên. Khi lần đầu tiên trở lại nginx trực tuyến sẽ chuyển sang máy chủ đầu tiên. Với giải pháp này, bạn không mất bất kỳ yêu cầu nào. – diti