gpt4 book ai didi

javascript - 我可以让 TypeScript 包含 node_modules 以进行编译吗?

转载 作者:行者123 更新时间:2023-12-01 15:04:10 24 4
gpt4 key购买 nike

好的,所以我在设置我的 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目录转移到输出 dist目录以及我所有的其他 .ts文件目录,以便 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 时,如何让 TypeScript 将其包含在转译中(因此它将使用我的 tsconfig.json 文件)?

更新:
我发现我可以让它包含我的 node_modules将目录显式放入 include .tsconfig.json 中的指令像这样:
"include": [
"./src/node_modules/**/*",
"./src/**/*"
]

问题仍然存在;我在这里是否遇到了根本性的错误,因为我必须覆盖默认情况下 TypeScript 排除的某些内容?我已经对此进行了测试,当我将其转译时 node_modules ,它确实正确地找到了我的本地模块。

最佳答案

包含 node_modules 是不正确的用于转译。因为node_modules包含 javascript 并且在 ts 库的情况下不需要第二次编译,它们应该在 .d.ts 中有声明.

如果你有自定义类型,或者你想给一些没有自定义类型的库添加类型,你需要使用自己的declarations@types/*包。

在您的 tsconfig.json您可以定义类型根(从哪里加载声明)。

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

那么你可以安装 npm i --save-dev @types/node@^12例如获取 nodejs v12 的声明。

并在 declarations 中定义您自己的声明对于 express例如: ./declarations/express/index.d.ts
import * as express from 'express';

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

关于javascript - 我可以让 TypeScript 包含 node_modules 以进行编译吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46517459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com