打字稿找不到本地链接的模块?

Posted

技术标签:

【中文标题】打字稿找不到本地链接的模块?【英文标题】:Typescript can not find locally linked module? 【发布时间】:2019-04-28 14:34:42 【问题描述】:

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

但是,我已经从 github 分叉了该模​​块的存储库,并希望将其包含在项目中,以便其他人可以使用它。为了实现这一点,我编辑了分叉项目的package.json 指向typessource/index.d.ts,它位于mainsource/index.js 文件旁边。然后在我的项目中,我使用npm link ../chrome-aws-lambda 链接它。

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

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

这些都不起作用。

我不想在不知道它是否有效的情况下提交 PR。有没有人知道在这里做什么?我很乐意添加所需的任何相关信息,请告诉我!我已经包含了index.d.ts 以及下面的导入语句,以防我在那里做一些愚蠢的事情。

谢谢!

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】:

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

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

【讨论】:

以上是关于打字稿找不到本地链接的模块?的主要内容,如果未能解决你的问题,请参考以下文章

错误:“HTMLDivElement”类型上不存在属性“值”?打字稿找不到我的div?

node.js/typescript 找不到本地模块

打字稿给出,“找不到模块'xmlhttprequest'的声明文件。”

打字稿:具有有效打字的“找不到模块”

詹金斯错误:找不到模块'打字稿'

测试套件无法运行 - 找不到模块“打字稿”