npm - Typescript 找不到本地鏈接的模組?
我正在嘗試測試一些我為一個沒有任何型別定義的 Node 專案所做的 TypeScript 定義。當我將它們包含在使用目標 Node 專案的專案中時,它們已經可以運作,或者當我在 node_modules/@types/ 中建立自己的資料夾並將它們放在那裡(node_modules/@types/chrome-aws-lambda/index.d.ts)時,也可以運作。這是在使用 Node 8.10、npm 5.6 以及 TypeScript 3.1 的情況下。
不過,我已經從 GitHub 分叉了這個模組的倉庫,並希望將它包含在專案中,以便其他人可以使用。為了實現這一點,我已經編輯了分叉專案的 package.json,將 types 指向與 main、source/index.js 文件並列的 source/index.d.ts。然後在我的專案中,我使用 npm link ../chrome-aws-lambda 將其連結起來。
這不行。當我執行 tsc 時,無法找到它所說的模組。error TS2307: Cannot find module 'chrome-aws-lambda' 當我使用 --traceResolution 執行時,它甚至看起來都沒有試著去尋找它。
我想過這可能與套件並未真正“安裝”有關,所以我試著直接把專案目錄複製到 node_modules,而不是使用連結。我也認為可能有些東西沒運作,TypeScript 並沒有讀取 package.json 中的 types 欄位,所以我在根目錄放了一個,因為那是預設值。我想可能它沒有被包含進去,所以我在 .tsconfig 的 include 部分加上了它。我也嘗試過修改設定檔中的 baseUrl、paths、typeRoots 及 moduleResolution。
這些都不起作用。
我不想提交一個 PR,而不知道它是否能正常運作。有誰對這裡該怎麼做有任何線索嗎?我很樂意提供任何需要的相關資訊,請告訴我!我已經附上了 index.d.ts 以及下面的 import 語句,以防我只是在哪裡做錯了什麼。
謝謝!
index.d.ts:
declare module 'chrome-aws-lambda' {
import * as Puppeteer from 'puppeteer';
export default class Chromium {
static args : Array<string>;
static defaultViewport : {
width : number,
height : number,
deviceScaleFactor : number,
isMobile : boolean,
hasTouch : boolean,
isLandscape : boolean
};
static executablePath : Promise<string>;
static headless : boolean;
static puppeteer : typeof Puppeteer;
}
}
以及相關的匯入語句:
import Chromium from 'chrome-aws-lambda';答案#1
根據這個回答,你必須將你的 .d.ts 文件設置為一個模組。希望這對你有幫助。
另外,你不必把 .d.ts 放到特定路徑,它可以放在專案的任何地方。我認為這個討論會非常有幫助。