Не дубликат.
Я знаю, что этот вопрос часто задавался здесь, однако обычное решение этой проблемы - добавить
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "current"
}
}
]
]
}
на ваш .babelrc, однако я сделал это и все еще получаю ошибку.
Полная трассировка стека моей ошибки:
C:\...\node_modules\sequelize\lib\sequelize.js:417
this.importCache[importPath] = defineCall(this, DataTypes);
^
TypeError: Class constructor User cannot be invoked without 'new'
at Sequelize.import (C:\...\node_modules\sequelize\lib\sequelize.js:417:38)
at Object.<anonymous> (../../src/models/index.ts:22:9)
at Module._compile (internal/modules/cjs/loader.js:701:30)
at Module._compile (C:\...\node_modules\pirates\lib\index.js:99:24)
at Module._extensions..js (internal/modules/cjs/loader.js:712:10)
at Object.newLoader [as .js] (C:\...\node_modules\pirates\lib\index.js:104:7)
at Module.load (internal/modules/cjs/loader.js:600:32)
at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
at Function.Module._load (internal/modules/cjs/loader.js:531:3)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:22:18)
at Object.<anonymous> (../src/index.ts:9:1)
at Module._compile (internal/modules/cjs/loader.js:701:30)
at Module._compile (C:\...\node_modules\pirates\lib\index.js:99:24)
at Module._extensions..js (internal/modules/cjs/loader.js:712:10)
at Object.newLoader [as .js] (C:\...\node_modules\pirates\lib\index.js:104:7)
at Module.load (internal/modules/cjs/loader.js:600:32)
at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
at Function.Module._load (internal/modules/cjs/loader.js:531:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)
at Object.<anonymous> (C:\...\node_modules\@babel\node\lib\_babel-node.js:234:23)
at Module._compile (internal/modules/cjs/loader.js:701:30)
Мои зависимости:
"devDependencies": {
"@babel/core": "^7.4.3",
"@babel/node": "^7.2.2",
"@babel/preset-env": "^7.4.3",
"@babel/register": "^7.4.0",
"@types/bcrypt": "^3.0.0",
"@types/bluebird": "^3.5.26",
"@types/cors": "^2.8.5",
"@types/dotenv": "^6.1.1",
"@types/express": "^4.16.1",
"@types/graphql": "^14.2.0",
"@types/graphql-resolvers": "^0.2.0",
"@types/ioredis": "^4.0.10",
"@types/jsonwebtoken": "^8.3.2",
"@types/node": "^11.13.7",
"@types/nodemailer": "^4.6.7",
"@types/pg": "^7.4.14",
"@types/validator": "^10.11.0",
"nodemon": "^1.18.11",
"typescript": "^3.4.5"
},
"dependencies": {
"apollo-server": "^2.4.8",
"apollo-server-express": "^2.4.8",
"bcrypt": "^3.0.6",
"cors": "^2.8.5",
"dotenv": "^7.0.0",
"express": "^4.16.4",
"graphql": "^14.2.1",
"graphql-redis-subscriptions": "^2.1.0",
"graphql-resolvers": "^0.3.2",
"ioredis": "^4.9.0",
"jsonwebtoken": "^8.5.1",
"nodemailer": "^6.1.0",
"pg": "^7.9.0",
"sequelize": "^5.5.0"
}
Использование Node версии 10.15.3 (Это текущая версия LTS. Я не могу перейти на текущую версию 12, поскольку она нарушает пакет bcrypt).
Моя конфигурация машинописного текста:
{
"compilerOptions": {
"allowJs": true,
"allowSyntheticDefaultImports": true,
"jsx": "preserve",
"lib": ["dom", "es2017"],
"module": "esnext",
"moduleResolution": "node",
"noUnusedLocals": true,
"noUnusedParameters": true,
"preserveConstEnums": true,
"skipLibCheck": true,
"sourceMap": true,
"strict": true,
"target": "esnext",
"outDir": "out"
}
}
Вот строка кода, вызывающая проблему:
const models: IF_Models = {
User: sequelize.import("./user"),
Team: sequelize.import("./team")
};
export default models;
И ./user импортируется:
class User extends Model {
public test!: string;
public userId!: number;
public orgId!: number;
public role!: string;
public name!: string;
public email!: string;
public password!: string | null;
public readonly createdAt!: Date;
public readonly updatedAt!: Date;
public static async findByLogin(email: string): Promise<User | null> {
return this.findOne({ where: { email } });
}
public generatePasswordHash!: () => Promise<string>;
public validatePassword!: (password: string) => Promise<boolean>;
}
User.init( ... )
User.prototype.generatePasswordHash( ... )
User.prototype.validatePassword( ... )
export default User
. / Team похожий формат.
Если я перехожу на "module": "commonjs"
и запускаю приложение без babel, я получаю ту же ошибку.
Изначально меня убеждали, что это ошибка вавилона, но я думаю, что это должно быть ошибкой в методе импорта sequelize, поскольку ошибка все еще возникает даже без использования babel.
Есть предложения, что еще можно попробовать?