簡體   English   中英

如何管理動態導入的節點模塊的依賴關系?

[英]How are dependecies of dynamically imported node modules managed?

我正在使用動態導入在運行時將模塊添加到節點 repl 應用程序。 然而,動態導入的模塊可能有自己的 static 導入。 在我嘗試開始工作的示例中,動態模塊(沒有 package.json 的 mjs 文件)導入安裝在主應用程序中的庫。 但是,當調用await import()時,節點找不到 static 依賴項。

我曾經(錯誤地?)假設動態導入會根據托管應用程序的node_modules樹中安裝的內容來解決依賴關系。

因此,在我的情況下, mmmagic安裝在托管應用程序中並靜態導入到動態模塊中,但找不到。

Could not load script helper.mjs
Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'mmmagic' imported from C:\Users\don\scripts\helper.mjs
    at new NodeError (node:internal/errors:372:5)
    at packageResolve (node:internal/modules/esm/resolve:954:9)
    at moduleResolve (node:internal/modules/esm/resolve:1003:20)
    at defaultResolve (node:internal/modules/esm/resolve:1218:11)
    at ESMLoader.resolve (node:internal/modules/esm/loader:580:30)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:294:18)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:80:40)
    at link (node:internal/modules/esm/module_job:78:36) {
  code: 'ERR_MODULE_NOT_FOUND'

搜索給定模塊的依賴項(當您沒有為依賴項指定顯式路徑時)相對於加載它們的模塊,而不是相對於應用程序。 因此,它會在嘗試加載另一個模塊的模塊下的node_modules子目錄中查找。 這樣,每個模塊都應該攜帶它自己的依賴項。 這就是模塊化背后的理念,因為每個模塊都可以獨立加載,而無需首先設置一些全局環境。 這使得模塊獨立,但對磁盤空間的效率較低。

請注意,這也允許模塊依賴於某些依賴模塊的特定版本(在它自己的 package.json 文件中指定)可能與同一項目中的其他模塊使用的不同。

暫無
暫無

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

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