我有一个 node 类型脚本项目,它使用了包括Express在内的几个第三方库.为了获得类型,我按照到处都能找到的说明安装@TYPE/EXPRESS模块作为dev依赖项.当我使用npm ci安装我的包时,一切都运行得很好,但是当我try 遵循构建容器镜像的最佳实践并运行npm ci --only=production时,构建失败并显示错误消息.

error TS7016: Could not find a declaration file for module 'express'. '/home/app/node_modules/express/index.js' implicitly has an 'any' type.
2.818   Try `npm i --save-dev @types/express` if it exists or add a new declaration (.d.ts) file containing `declare module 'express';`

这显然是因为它没有可用的类型库,但我在任何地方都看不到有人将@Types包作为产品依赖项安装.

此场景的最佳实践是什么?

推荐答案

这些类型是开发和构建所必需的(例如,将您的打字文件转换为JavaScript).

您只需将生产依赖项安装到"最终"映像中,您应该将已构建的JS文件复制到其中.因此,在这个阶段应该不再有任何类型.

如果您仍然需要将TS文件构建(传输)到容器内的JS中,那么将此阶段视为仍然是构建阶段,因此您仍然需要一些开发依赖项.然后可以移走用于生产.

Node.js相关问答推荐

对接Nestjs/VueJS应用程序

express返回意外的URL

Jest由于UUID而无法解析测试,即使在Jest中启用ESModule支持后也是如此

从目录中获取所有文件,而不是NodeJS中的单个文件

findoneandupdate()方法更新数据库,但其响应在请求中返回为null

是否可以在MongoDB中比较和匹配引用文档中的字段

使用AWS SDK for JavaScript V3将图像从node.js上传到s3 bucket

Rest-Api动态图像路径和Express除非

AWS ECS 服务发现 Cors 问题?

node-gyp: "..\src\binding.cc: 没有这样的文件或目录"

npm chokidar 触发事件两次

在将用作 nodejs/expressjs 中的中间件的函数中使用 keycloak.protect()

在mongodb中只查询整数

ESLint:TypeError:this.libOptions.parse 不是函数

NodeJs 过滤掉目录异步

AWS Kinesis 中的分区键是什么?

Passport 登录和持久会话

如何使用 cookie 创建 HTTP 客户端请求?

Express js 阻止 GET /favicon.ico

node.js 异步库