簡體   English   中英

當文件更改后第二次需要時,Nodejs 需要返回相同的舊文件

[英]Nodejs require returns same old file when requiring a second time after the file changed

所以在我的 nodejs 服務器文件中,我有一行:

tools=require("./tools.js");

工具文件包含我經常更改的函數等,所以我想不是每次更改時都重新啟動服務器,我可以簡單地添加一些方法讓我重新需要 tools.js,所以我做到了。 但是現在的問題是,當我啟動程序時,更改 tools.js 並使其重新需要它,它再次需要它,就好像它仍然處於第一次需要時的狀態一樣。 什么?

編輯:我不想在文件更改時重新啟動應用程序,因為這與重新啟動服務器相同,這是我想要防止的! 所以我需要一些讓我重新需要它的東西,忽略模塊緩存或其他什么。

有什么想法可以幫助我嗎?

如果您不想重新啟動應用程序,請在每次需要時執行此操作。

var path = require('path');
var filename = path.resolve('./tools.js');
delete require.cache[filename];
var tools = require('./tools');

這為我解決了:

let tools = require("./tools.js"); 
delete require.cache[require.resolve("./tools.js")];
tools = require("./tools.js");

這個答案的信用

如果我理解正確,您就會遇到 Node 的模塊緩存。 http://nodejs.org/docs/latest/api/modules.html#modules_caching

如果這是一個選項,您可能想要為 Node 尋找合適的重新加載器。 例如,請參見https://github.com/isaacs/node-supervisor

看看主管。 Supervisor 可以在文件更改時自動重新啟動應用程序,並且設置簡單。

npm install -g supervisor

supervisor app.js

一旦 node.js require()sa 模塊,任何對 require() 的后續調用從內存中獲取它,實際的模塊文件就不會再次加載。 您需要做的是使用像 nodemon (https://github.com/remy/nodemon ) 這樣的工具,它會在文件更改時自動重新啟動您的應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM