我可以让TypeScript包含node_modules进行转换吗?

时间:2017-10-01 22:23:03

标签: javascript node.js typescript transpiler

好的,所以我在设置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时,它确实可以正确找到我的本地模块。

1 个答案:

答案 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