【发布时间】:2022-01-12 14:57:06
【问题描述】:
Sequelize 文档声称它可以与 Typescript 一起使用,但为了使其在生产中有用,需要使用 DB 迁移脚本。这些只能使用 Sequelize CLI 执行,但这个 CLI 似乎根本不考虑 Typescript。它只生成(并且显然运行)JS 文件。 NPM 上有一个“sequelize-cli-typescript”项目,但它已经 4 岁了! Stack Overflow 上对相关问题的唯一答案实际上是 6 个字长,没有一个有用:Using sequelize cli with typescript
我的设置是这样的:
我用 Typescript 和一个简单的 tsconfig.js 创建了一个基本的 Node 应用程序,如下所示:
{
"compilerOptions": {
"allowJs": true,
"module": "commonjs",
"esModuleInterop": true,
"target": "es6",
"noImplicitAny": true,
"moduleResolution": "node",
"sourceMap": true,
"outDir": "dist",
"baseUrl": ".",
"paths": {
"*": [
"node_modules/*"
]
}
},
"include": [
"*"
]
}
我也在使用 ESLint 和以下 .eslintrc:
{
"root": true,
"parser": "@typescript-eslint/parser",
"plugins": [
"@typescript-eslint"
],
"extends": [
"airbnb-base", "airbnb-typescript/base"
],
"parserOptions": {
"project": "./tsconfig.json"
}
}
然后我尝试运行 Sequelize CLI init 命令 npx sequelize-cli init,如 DB 迁移文档中所述。这导致使用以下内容创建文件models/index.js:
'use strict';
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};
let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(config.database, config.username, config.password, config);
}
fs
.readdirSync(__dirname)
.filter(file => {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(file => {
const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
db[model.name] = model;
});
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
这会导致我的 IDE(VS 代码)显示错误:
解析错误:已为 @typescript-eslint/parser 设置了“parserOptions.project”。 该文件与您的项目配置不匹配:models/index.js。 该文件必须包含在至少一个提供的项目中。
我不知道这是什么意思。我已经阅读了许多解释,但没有一个对我有意义。我在 tsconfig 中将 allowJs 设置为 true 并包含所有内容。我错过了什么?更重要的是如何使用 Typescript 进行数据库迁移和 CLI 生成的代码?
【问题讨论】:
标签: node.js typescript sequelize.js