Typescript找不到本地链接的模块?

时间:2018-11-26 21:58:31

标签: typescript npm node-modules npm-link

我正在尝试测试为没有任何节点项目的打字稿定义。当我将它们包含在消耗目标节点项目的项目中时,或者当我在node_modules/@types/中创建自己的文件夹并将其放置在node_modules/@types/chrome-aws-lambda/index.d.ts中时,它们已经起作用。这是使用节点8.10,npm 5.6和打字稿3.1

但是,我从github分叉了模块的存储库,希望将其包含在项目中,以便其他人可以使用它。为了做到这一点,我编辑了分叉项目的package.json,将types指向source/index.d.tsmain文件旁边的source/index.js。然后在我的项目中,使用npm link ../chrome-aws-lambda将其链接。

这不起作用。当我运行tsc时,找不到它说的模块。 error TS2307: Cannot find module 'chrome-aws-lambda' 当我使用--traceResolution运行它时,它似乎并没有尝试寻找它。

我发现这可能与未真正“安装”软件包有关,因此我尝试将项目目录复制到node_modules而不是链接它。我还以为也许是有些问题,并且打字稿没有读取types中的package.json字段,所以我将其中一个放在根目录中,因为这是默认设置。我以为可能没有包含它,因此我将其添加到了.tsconfig的包含部分中。我也尝试在配置文件中更改我的baseUrlpathstypeRootsmoduleResolution

这些都不起作用。

我不希望知道PR是否有效而提交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 个答案:

答案 0 :(得分:-1)

根据this answer,您必须将.d.ts文件设为模块。希望对您有所帮助。

此外,您不必将.d.ts放在特殊路径中,它可以在项目中的任何位置。我认为这个discussion 会很有帮助。