![](/img/trans.png)
[英]How to get the directory of the .exe for a Node.js pkg executable?
[英]How to require json data to Node.js after bundling the whole server into an executable with the "pkg" compiler?
在我通過“npm start”運行的普通 node.js 環境中,我總是可以只需要/導入 JSON 並且將接收文件中的數據。
例如,如果我有 "./Assets/port.json" 並且它包含{"port": 3000}
當我導入它並訪問數據時,我將獲得端口 3000,如果 port.json 文件中的數據改成port:3001,我導入的時候會得到3001端口。 工作正常。
但是一旦我使用“pkg server.js” package 文件並且我得到了我的可執行文件,似乎 json 數據被寫入可執行二進制文件,然后當我更改 Z466DEEC76ECDF5FCA6D38571F6324 文件中的數據時,我仍然得到相同的文件在將 node.js 代碼編譯為可執行文件期間,我在 json 文件中擁有的數據。
一旦我的 node.js 代碼被編譯成可執行文件,如何防止 json 數據被編譯成二進制文件並導入 json 數據? 這對我來說非常重要,因為我正在創建一個將在他們的 LAN 上運行服務器的客戶端應用程序,所以我必須能夠從 json 文件中導入動態 ipv4/端口。
從 pkg文檔:
另一方面,為了在運行時訪問真實的文件系統(選擇用戶的外部 javascript 插件,json 配置,甚至獲取用戶目錄列表),您應該使用 process.cwd() 或 path.dirname(process.執行路徑)。
代碼如:
require("./Assets/port.json")
將自動替換為 pkg 中捆綁資產的加載,這就是 pkg 所做的。 它使用某些規則搜索您的源代碼以加載事物。 但是,如果您使用以下內容加載它:
const config = require(path.join(path.dirname(process.execPath), "port.json"));
console.log(config.port);
並確保文件port.json
在您的應用程序安裝到某處后與您打包的可執行文件位於同一目錄中,然后 pkg 將保留此代碼並允許您從與可執行文件所在的同一目錄動態加載配置文件.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.