如何使用打字稿捆绑项目构造包依赖关系?

时间:2019-09-04 14:11:15

标签: typescript npm package.json

我正在编写一个使用基于打字稿的项目(winston)的打字稿模块。

该项目有bundled its types in a index.d.ts个文件,没有@types/winston软件包可以用作“ devDependency”。

据我了解,typescript依赖项应驻留在devDependencies节中,因为它不是运行时所需的依赖项。 winston依赖关系当然应该驻留在dependencies部分中,因为它将在运行时中使用。

问题是,如果我运行npm install --only=dev,将不会下载winston程序包,并且由于我没有tsc类型,我的winston执行将失败(error TS2307: Cannot find module 'winston')。

即使我能以某种方式解决此错误,也很明显,由于未下载包,因此在打字稿编译期间我将无法使用包的打字。

那么这里的方法应该是什么? 是否每个提供自己类型的Typescript捆绑软件包都应位于devDependencies的{​​{1}}部分中? 但是package.json会丢失依赖项并在运行时失败吗?

我尝试在npm install --production的{​​{1}}和winston部分中同时添加devDependencies,但是运行dependencies不会下载{ {1}}部分(不确定“按设计”还是npm逻辑中的错误)。

package.json

package.json

test.ts

npm install --only=dev

1 个答案:

答案 0 :(得分:1)

每个人通常使用的命令只是npm install。您正在使用的附加参数—only=dev告诉NPM仅下载devDependencies部分中的软件包。

这不是用于开发与生产构建的切换!这就是为什么您看到错误。

在创建TypeScript库时,您无需在@types中定义。相反,我们可以在包本身中包含我们的定义:

确保TypeScript还在您的输出中创建定义文件-检查输出文件夹(通常是dist或lib文件夹),如果您看到扩展名为.d.ts的文件以及.js文件,则效果很好,否则请查看如何设置tsconfig.json直到发出定义为止。

一旦有了类型,在package.json中就有属性“ main”,您可以在其中声明输出文件夹中已编译的.js包的入口点。还需要添加一个属性“类型”,并指向与主入口点同名的.d.ts文件。

那应该是您要做的所有事情,如果还没有的话。