好的,所以我在设置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
目录,以便{{1} }目录看起来像这样:
dist
然后,当Node.js查找模块时,它将在/node_modules <-- Main NPM modules dir
/...
/package.json
/dist
/node_modules <-- My local modules dir
/modules
/myModule.js
/scripts
/init.js
找到它。所以在这种情况下,我确实希望TypeScript在其输入文件中包含dist/node_modules/modules/myModule.js
目录。我似乎缺少一些基本的东西,因为TypeScript默认忽略了这个目录。
我的场景是否包含node_modules
目录是合法的,如果是这样,当我运行node_modules
时,如何让TypeScript在转换中包含它(因此它将使用我的{ {1}}文件)?
更新
我发现我可以将它包含在我的tsc
目录中,方法是将其明确地放在tsconfig.json
的{{1}}指令中,如下所示:
node_modules
问题仍然存在;我在这里得到了一些根本错误的东西,因为我必须覆盖默认情况下TypeScript排除的东西吗?我已对此进行了测试,当我将其转换为include
时,它确实可以正确找到我的本地模块。
答案 0 :(得分:2)
包含b1.explode().explode().tolist()
进行转译是不正确的。由于node_modules
包含javascript并且在ts库的情况下不需要第二次转译,因此它们应该在node_modules
中具有声明。
如果您有自定义类型,或者要将类型添加到一些没有自定义类型的库中,则需要使用自己的declarations或.d.ts
包。
在您的@types/*
中,您可以定义类型根(从中加载声明的位置)。
tsconfig.json
然后您可以安装{
"compilerOptions": {
"typeRoots": ["./declarations", "./node_modules/@types"],
"types": ["node"],
}
}
例如获取nodejs v12的声明。
并在npm i --save-dev @types/node@^12
中为declarations
定义自己的声明,例如:express
./declarations/express/index.d.ts