這應該是一個微不足道的問題。假設我有我的漂亮文件,foo.js
。我用node foo.js
運行它。它運行並運行。當它仍在運行時,我打開我最喜歡的文本編輯器並編輯foo.js
,爲代碼添加了很多錯誤。在執行時編輯NodeJS文件
我可以確定這不會影響foo.js
的當前執行嗎?當我假定文件將在執行開始時被讀取,我是否正確,然後將不需要再讀取它,因爲它將被保存在內存中?或者當文件已經執行時,可以對文件進行編輯?
這應該是一個微不足道的問題。假設我有我的漂亮文件,foo.js
。我用node foo.js
運行它。它運行並運行。當它仍在運行時,我打開我最喜歡的文本編輯器並編輯foo.js
,爲代碼添加了很多錯誤。在執行時編輯NodeJS文件
我可以確定這不會影響foo.js
的當前執行嗎?當我假定文件將在執行開始時被讀取,我是否正確,然後將不需要再讀取它,因爲它將被保存在內存中?或者當文件已經執行時,可以對文件進行編輯?
您在命令行上指定的初始文件(如node foo.js
)的node.js代碼模型是,在啓動時,從磁盤讀取foo.js
,解析爲Javascript字節代碼,然後執行。您從該文件中定義的任何函數或變量都將保存在內存中。沒有任何情況下,node.js
將完全依靠自己,重讀foo.js
。
一些潛在的地方,它可以得到重讀是:
如果您有指foo.js
在磁盤上,如require()
陳述或一些代碼,實際上是從磁盤讀取它的一些特定的代碼。
如果使用任何自動重啓工具,如forever
。在這種情況下,如果您的進程崩潰並永久重新啓動,那麼在重新啓動期間顯然會讀取foo.js
的新副本。
如果您分叉,產卵或執行您自己的過程。請注意,這可能發生在某些形式的動態集羣或某些類型的代碼中,僅在某些情況下啓動新進程。
使用Node.JS執行文件時,它只能讀取一次。如果您在執行過程中編輯文件,它不會影響執行。您可以安全地編輯它,而不用擔心錯誤。
當然,這是不同的,如果你是動態加載一些模塊,例如:
setTimeout(function() {
var myModule = require("./myModule.js");
}, 10000);
如果你已經加載之前編輯myModule.js
,將它與變化加載。
是的,你說得對。這在您部署時也很有用。但是如果不是從一開始就讀取所有模塊,那麼對於真正的程序(通常不止一個文件)可能會更危險一點。 –
太棒了。非常感謝。 –