node.js - Heroku 构建在 package.json 文件中找不到`@types`
问题描述
Heroku 构建错误
- TSError: ⨯ Unable to compile TypeScript:
- src/server.ts(1,38): error TS7016: Could not find a declaration file for module 'express'. '/app/node_modules/express/index.js' implicitly has an 'any' type.
- Try `npm i --save-dev @types/express` if it exists or add a new declaration (.d.ts) file containing `declare module 'express';`
- src/server.ts(10,14): error TS2580: Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.
一直在试图弄清楚如何将我的代码升级到heroku,最新的错误如上所示,我不确定我需要更改什么才能使其正常工作。我一直在遵循指南,并且在我的 package.json 脚本中有一个@types/express
,@types/node
等。但是,它不是在阅读它们。不知道从哪里开始,将不胜感激。
tsconfig.json
{
"compilerOptions": {
"target": "es2017",
"module": "commonjs",
"sourceMap": true,
"outDir": "./build",
"rootDir": "./src",
"strict": true,
"noImplicitAny": true,
"moduleResolution": "node",
"baseUrl": "./src",
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
},
"lib": ["es2015"],
"include": ["src/**/*.ts"],
"exclude": ["node_modules", "src/**/*.test.ts"]
}
档案
web:ts-node/src/server.ts
src/server.ts
import express, { Application } from 'express';
import { routes } from './routes';
// Boot express
export const app: Application = express();
// Application routing
routes(app);
const port = process.env.PORT || 5000;
// Start server
app.listen(port, () => console.log(`Server is listening on port ${port}!`));
包.json
{
"name": "my-app",
"version": "1.0.0",
"main": "src/server.ts",
"type": "commonjs",
"scripts": {
"start": "ts-node src/server.ts",
"dev": "nodemon -x ts-node src/server.ts",
"build": "tsc",
"test": "jest --coverage"
},
"keywords": [],
"author": "",
"license": "ISC",
"husky": {
"hooks": {
"pre-commit": "pretty-quick --staged"
}
},
"devDependencies": {
"@types/cors": "^2.8.12",
"@types/express": "^4.17.13",
"@types/node": "^16.7.6",
"@types/jest": "^26.0.24",
"@types/supertest": "^2.0.11",
"@typescript-eslint/eslint-plugin": "^4.29.0",
"@typescript-eslint/parser": "^4.29.0",
"eslint": "^7.32.0",
"eslint-config-standard": "^16.0.3",
"eslint-plugin-import": "^2.23.4",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^5.1.0",
"husky": "^7.0.1",
"jest": "^27.0.6",
"nodemon": "^2.0.12",
"prettier": "^2.3.2",
"pretty-quick": "^3.1.1",
"supertest": "^6.1.4",
"ts-jest": "^27.0.4"
},
"dependencies": {
"axios": "^0.21.1",
"body-parser": "^1.19.0",
"cors": "^2.8.5",
"express": "^4.17.1",
"ts-node": "^10.1.0",
"typescript": "^4.3.5"
},
"description": ""
}
解决方案
弄清楚了。
Heroku 在构建项目时会修剪开发依赖项。由于我的所有人@types
都位于其中,devDependencies
因此无法访问并导致初始帖子中显示的错误。
包.json
// i also added engine specifications.
// the docs suggest matching your configurations as closely to your dev
// environment as possible for obvious reasons.
"engines": {
"node": "15.x",
"npm": "7.x"
},
...
"dependencies": {
"@types/cors": "^2.8.12",
"@types/express": "^4.17.13",
"@types/node": "^16.7.6",
"axios": "^0.21.1",
"body-parser": "^1.19.0",
"cors": "^2.8.5",
"express": "^4.17.1",
"ts-node": "^10.2.1",
"typescript": "^4.4.2"
}
推荐阅读
- c# - DDD 解决方案结构
- javascript - 尝试自动化 jQuery 点击事件并显示内容
- c - 如何在 C 中将 char 附加到字符串中动态分配内存?
- javascript - 使用 AJAX 预填充 Django Select 表单
- python - 如何使用 Tensorflow 估计器对保存的模型进行评分?
- python-3.x - 对象不可迭代。我怎样才能使这个代码工作
- laravel - Laravel 身份验证生命周期
- aem - AEM 在 DAM 中搜索文件
- node.js - 没有 SSH 的情况下,像“Localtunnel”这样的隧道服务如何工作?
- json - 如何将 angular.json 保存为 UTF-8?