我正在编写一个使用基于打字稿的项目(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
答案 0 :(得分:1)
每个人通常使用的命令只是npm install
。您正在使用的附加参数—only=dev
告诉NPM仅下载devDependencies部分中的软件包。
这不是用于开发与生产构建的切换!这就是为什么您看到错误。
在创建TypeScript库时,您无需在@types中定义。相反,我们可以在包本身中包含我们的定义:
确保TypeScript还在您的输出中创建定义文件-检查输出文件夹(通常是dist或lib文件夹),如果您看到扩展名为.d.ts的文件以及.js文件,则效果很好,否则请查看如何设置tsconfig.json直到发出定义为止。
一旦有了类型,在package.json中就有属性“ main”,您可以在其中声明输出文件夹中已编译的.js包的入口点。还需要添加一个属性“类型”,并指向与主入口点同名的.d.ts文件。
那应该是您要做的所有事情,如果还没有的话。