簡體   English   中英

我可以讓 TypeScript 包含用於轉譯的 node_modules 嗎?

[英]Can I make TypeScript include node_modules for transpilation?

好的,所以我在設置 Node.js TypeScript 項目時遇到了一個有趣的情況。 我希望能夠使用非相對的require引用來引用我的本地模塊。 TypeScript 和 Node.js 查找模塊的方式是在當前目錄中查找node_modules目錄,然后在每個父目錄中查找,直到找到包含引用的目錄。 因此,假設我有一個要在以下目錄結構中引用的模塊:

/node_modules        <-- Main NPM modules dir
    /...
/package.json
/src
    /node_modules    <-- My local modules dir
        /modules
            /myModule.ts
    /scripts
        /init.ts

...在init.ts我像這樣引用myModule

import myModule from "modules/myModule";

據我了解,我希望 TypeScript 將我的node_modules目錄與所有其他.ts文件目錄一起轉換到輸出dist目錄,以便dist目錄如下所示:

/node_modules        <-- Main NPM modules dir
    /...
/package.json
/dist
    /node_modules    <-- My local modules dir
        /modules
            /myModule.js
    /scripts
        /init.js

然后,當 Node.js 查找模塊時,它會在dist/node_modules/modules/myModule.js找到它。 所以在這種情況下,我確實希望 TypeScript 在其輸入文件中包含node_modules目錄。 不過,我似乎缺少一些基本的東西,因為 TypeScript 實際上默認忽略了這個目錄。

我的場景是否是包含node_modules目錄的合法場景,如果是這樣,當我只運行tsc (因此它將使用我的tsconfig.json文件)時,如何讓 TypeScript 將它包含在轉譯中?

更新:我發現,我可以把它包括我node_modules目錄通過明確地把它在include該指令.tsconfig.json像這樣:

"include": [
    "./src/node_modules/**/*",
    "./src/**/*"
]

問題仍然存在; 我是否在這里遇到了根本性的錯誤,因為我必須覆蓋默認情況下 TypeScript 排除的內容? 我已經測試過了,當我讓它轉譯node_modules ,它確實正確地找到了我的本地模塊。

這是不正確的包括node_modules為transpilation。 因為node_modules包含 javascript 並且在 ts 庫的情況下不需要第二次轉換,所以它們應該在.d.ts有聲明。

如果您有自定義類型,或者您想將類型添加到一些沒有它們的庫中,則需要使用自己的聲明@types/*包。

在您的tsconfig.json您可以定義類型根(從何處加載聲明)。

{
    "compilerOptions": {
        "typeRoots": ["./declarations", "./node_modules/@types"],
        "types": ["node"],
    }
}

然后你可以安裝npm i --save-dev @types/node@^12例如來獲取 nodejs v12 的聲明。

並在express的聲明中定義您自己的聲明,例如: ./declarations/express/index.d.ts declarations express / ./declarations/express/index.d.ts

import * as express from 'express';

declare module 'express' {
    export interface Request {
        user?: {
            id: string;
            name: string;
        }
    }
}

暫無
暫無

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

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