」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Node.js v .env 檔案、導入模組和權限模型

Node.js v .env 檔案、導入模組和權限模型

發佈於2024-08-22
瀏覽:321

Node.js v .env files, import modules, and Permission Model

Node.js v20.6 已發布,其中包含令人驚嘆的新功能,這些新功能是 2023 年 10 月 24 日起 LTS 版本的一部分。讓我們拭目以待!

INI 設定檔

告別 dotenv 套件,現在 Node.js 可以從 .env 檔案載入環境變數。

node --env-file path/to/.env index.js

? INI 檔案的路徑是必要的,因為 Node.js 沒有為 INI 檔案選擇預設名稱。

?如果 INI 檔案不存在,則節點進程不會失敗,只需在沒有環境變數的情況下開始執行。

正在載入NODE_OPTIONS

您可以使用 INI 設定檔載入 Node.js 的特定環境變數(如 NODE_OPTIONS),如下例所示:

NODE_NO_WARNINGS=1
NODE_OPTIONS="--experimental-permission --allow-fs-read=*"
TZ=Pacific/Honolulu
UV_THREADPOOL_SIZE=5

您可以使用相同的方法:

node --env-file .env index.js

預先載入 ES 模組

在啟動時使用 --import 標誌預先載入 ES 模組,該模組將在任何應用程式程式碼運行之前加載,甚至是入口點。

node --import path/to/file.js index.js

此標誌類似於用於載入 CommonJS 模組的眾所周知的 --require 標誌。

?使用 --require 預先載入的模組將在使用 --import 預先載入的模組之前執行。

權限模型

我們有一個新的機制來限制在 Node.js 進程執行期間對特定資源的訪問,稱為權限模型。該 API 存在於標誌 --experimental-permission 後面,啟用該標誌後,將限制對所有未明確允許的資源的存取。

檔案系統權限

--allow-fs-read 標誌允許使用 * 的所有 FileSystemRead 操作,或使用絕對路徑的特定路徑。

node --experimental-permission --allow-fs-read=* index.js

要僅允許存取特定路徑,您應該使用絕對路徑

node --experimental-permission --allow-fs-read=/path/to/index.js --allow-fs-read=/path/to/directory index.js

?還需要允許初始化程式模組。否則 Node.js 進程本身無法載入 index.js 檔案。

?您可以使用 .允許存取工作目錄,但不能使用它來指定檔案的路徑(例如 ./index.js)。

node --experimental-permission --allow-fs-read=. index.js

--allow-fs-write 標誌允許使用 *.
存取特定路徑或整個檔案系統

node --experimental-permission --allow-fs-read=. --allow-fs-write=/tmp/ index.js

子行程

啟用權限模型後,預設情況下該進程將無法產生任何子進程,您應該使用 --allow-child-process 來允許此操作。讓我們對index.js使用以下程式碼。

const childProcess = require('node:child_process');
childProcess.spawn('node', ['-e', 'require("fs").writeFileSync("./new-file.txt", "Hello, World!")']);

要在啟用權限模型的情況下執行此程式碼片段,您應該使用下列命令執行index.js:

node --experimental-permission --allow-fs-read . --allow-child-process index.js

?子程序預設不會繼承權限模型,所以new-file.txt建立成功。

更多選擇

如果您想在此權限模型下建立工作線程,則可以檢查 --allow-worker 標誌,並檢查 --allow-wasi 以允許建立 WASI 實例

結論

我們有許多新工具來為我們的應用程式載入環境變量,一種導入程式碼中所需的預先載入 ES 模組的方法,以及一個新的權限模型來提高我們系統的安全性。

請繼續關注 Node.js 的博客,該團隊正在每個版本中添加很棒的功能!我們在 v22.6.0 中提供了初始 TypeScript 支援和使用 DevTools 的網路檢查。

版本聲明 本文轉載於:https://dev.to/cloudx/nodejs-v20-env-files-import-modules-and-permission-model-2fd9?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • FastAPI自定義404頁面創建指南
    FastAPI自定義404頁面創建指南
    response = await call_next(request) if response.status_code == 404: return RedirectResponse("https://fastapi.tiangolo.com") else: ...
    程式設計 發佈於2025-07-08
  • Java數組中元素位置查找技巧
    Java數組中元素位置查找技巧
    在Java數組中檢索元素的位置 利用Java的反射API將數組轉換為列表中,允許您使用indexof方法。 (primitives)(鏈接到Mishax的解決方案) 用於排序陣列的數組此方法此方法返回元素的索引,如果發現了元素的索引,或一個負值,指示應放置元素的插入點。
    程式設計 發佈於2025-07-08
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    在嘗試為JavaScript對象創建動態鍵時,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正確的方法採用方括號: jsobj ['key''i] ='example'1; 在JavaScript中,數組是一...
    程式設計 發佈於2025-07-08
  • 如何同步迭代並從PHP中的兩個等級陣列打印值?
    如何同步迭代並從PHP中的兩個等級陣列打印值?
    同步的迭代和打印值來自相同大小的兩個數組使用兩個數組相等大小的selectbox時,一個包含country代碼的數組,另一個包含鄉村代碼,另一個包含其相應名稱的數組,可能會因不當提供了exply for for for the uncore for the forsion for for ytry...
    程式設計 發佈於2025-07-08
  • 如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求模擬瀏覽器行為,以及偽造的用戶代理提供了一個用戶 - 代理標頭一個有效方法是提供有效的用戶式header,以提供有效的用戶 - 設置,該標題可以通過browser和Acterner Systems the equestersystermery和操作系統。通過模仿像Chro...
    程式設計 發佈於2025-07-08
  • 如何使用Regex在PHP中有效地提取括號內的文本
    如何使用Regex在PHP中有效地提取括號內的文本
    php:在括號內提取文本在處理括號內的文本時,找到最有效的解決方案是必不可少的。一種方法是利用PHP的字符串操作函數,如下所示: 作為替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式來搜索特...
    程式設計 發佈於2025-07-08
  • 在C#中如何高效重複字符串字符用於縮進?
    在C#中如何高效重複字符串字符用於縮進?
    在基於項目的深度下固定字符串時,重複一個字符串以進行凹痕,很方便有效地有一種有效的方法來返回字符串重複指定的次數的字符串。使用指定的次數。 constructor 這將返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.W...
    程式設計 發佈於2025-07-08
  • 在Python中如何創建動態變量?
    在Python中如何創建動態變量?
    在Python 中,動態創建變量的功能可以是一種強大的工具,尤其是在使用複雜的數據結構或算法時,Dynamic Variable Creation的動態變量創建。 Python提供了幾種創造性的方法來實現這一目標。 利用dictionaries 一種有效的方法是利用字典。字典允許您動態創建密鑰並...
    程式設計 發佈於2025-07-08
  • 哪種方法更有效地用於點 - 填點檢測:射線跟踪或matplotlib \的路徑contains_points?
    哪種方法更有效地用於點 - 填點檢測:射線跟踪或matplotlib \的路徑contains_points?
    在Python Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a path object to represent the polygon.它...
    程式設計 發佈於2025-07-08
  • 如何避免Go語言切片時的內存洩漏?
    如何避免Go語言切片時的內存洩漏?
    ,a [j:] ...雖然通常有效,但如果使用指針,可能會導致內存洩漏。這是因為原始的備份陣列保持完整,這意味著新切片外部指針引用的任何對象仍然可能佔據內存。 copy(a [i:] 對於k,n:= len(a)-j i,len(a); k
    程式設計 發佈於2025-07-08
  • 在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在C中的顯式刪除 在C中的動態內存分配時,開發人員通常會想知道是否需要手動調用“ delete”操作員在heap-exprogal exit exit上。本文深入研究了這個主題。 在C主函數中,使用了動態分配變量(HEAP內存)的指針。當應用程序退出時,此內存是否會自動發布?通常,是。但是,即使在...
    程式設計 發佈於2025-07-08
  • 為什麼儘管有效代碼,為什麼在PHP中捕獲輸入?
    為什麼儘管有效代碼,為什麼在PHP中捕獲輸入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,輸出...
    程式設計 發佈於2025-07-08
  • Go語言垃圾回收如何處理切片內存?
    Go語言垃圾回收如何處理切片內存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片時,了解垃圾收集行為至關重要,以避免潛在的內存洩...
    程式設計 發佈於2025-07-08
  • 為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    mySQL錯誤#1089:錯誤的前綴鍵錯誤descript [#1089-不正確的前綴鍵在嘗試在表中創建一個prefix鍵時會出現。前綴鍵旨在索引字符串列的特定前綴長度長度,可以更快地搜索這些前綴。 了解prefix keys `這將在整個Movie_ID列上創建標準主鍵。主密鑰對於唯一識...
    程式設計 發佈於2025-07-08
  • Async Void vs. Async Task在ASP.NET中:為什麼Async Void方法有時會拋出異常?
    Async Void vs. Async Task在ASP.NET中:為什麼Async Void方法有時會拋出異常?
    在ASP.NET async void void async void void void void void void void的設計無需返回asynchroncon而無需返回任務對象。他們在執行過程中增加未償還操作的計數,並在完成後減少。在某些情況下,這種行為可能是有益的,例如未期望或明確...
    程式設計 發佈於2025-07-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3