簡體   English   中英

typescript baseUrl 標志是否覆蓋了 moduleResolution: 節點的解析機制?

[英]Does typescript baseUrl flag override the resolution mechanism of moduleResolution: node?

我已經在moduleResolution 中紅色了模塊分辨率的官方文檔。 我們使用--moduleResolution來設置解析方法,我們建議使用node方法,它會從當前目錄向上查找node_modules目錄中的非相關模塊。

但也DOC mentiones 附加模塊的分辨率,這將找到所指定的目錄非親屬模塊baseUrl

那么這是否意味着如果我們設置baseUrl ,模塊解析過程將完全忽略node_modules目錄?

要回答您的問題 -是的,模塊解析過程將忽略node_modules文件夾,並且非相對名稱將被假定為相對於baseUrl

但請注意,在使用AMD模塊加載器的應用程序中,使用baseUrl是一種常見做法,其中模塊在運行時“部署”到single folder中。

如果該single folder不包含non-relative模塊,例如在某些情況下您希望這些庫存在於特定文件夾中,那么您必須使用path-mapping來解決問題。

例如,如果您使用的是moment庫,並且它被放置在您的模塊正在尋找它的根文件夾下的特定目錄中,那么您必須在 tsconfig.json 文件中明確提及如下所示的路徑 -

"baseUrl": "." ,
"paths": {
      "moment": ["node_modules/moment/ts3.1-typings/moment"] // This mapping is relative to "baseUrl"
    },

對於non-absolute模塊分辨率,請參見here -

但通常,如果您正在使用 node 編寫新應用程序,請使用“ commonjs ”模塊而不是AMD模塊。

我測試並找到了答案:

如果設置了 baseUrl,打字稿將使用它(連同paths )首先解析模塊。 但是如果解析失敗,它會像往常一樣轉到node_modules

import React from 'react'為例( --traceResolution ):

在此處輸入圖片說明

暫無
暫無

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

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