[英]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.