Sequelize+TypeScript+Express:模型创建与迁移配置问题咨询
问题二:迁移时提示“File: 20180424170257-create-todo.ts does not match pattern: /.js$/”,如何指定编译后的迁移文件?
这个错误是因为Sequelize CLI默认只识别.js格式的迁移文件,但你编写的是.ts文件。这里提供两种靠谱的解决思路,你可以根据项目流程选择:
方案一:让Sequelize CLI直接支持TS迁移文件(无需预编译)
这种方案适合不想每次迁移都先编译TS的场景,核心是用ts-node让CLI直接运行TS文件:
- 先安装必要的开发依赖:
npm install --save-dev ts-node typescript @types/node - 新建或修改项目根目录的
.sequelizerc配置文件,指定迁移文件后缀为.ts,并让CLI使用ts-node执行:const path = require('path'); module.exports = { config: path.resolve('src', 'config', 'config.ts'), 'models-path': path.resolve('src', 'models'), 'seeders-path': path.resolve('src', 'seeders'), 'migrations-path': path.resolve('src', 'migrations'), 'migration-file-ext': '.ts', // 指定迁移文件后缀 'cli-path': 'node_modules/ts-node/dist/bin.js' // 用ts-node执行TS文件 }; - 之后直接执行迁移命令即可,CLI会自动处理TS文件:
npx sequelize-cli db:migrate
方案二:预编译TS到JS,让Sequelize使用编译后的迁移文件
如果你的项目本来就有TS编译流程(比如把TS编译到dist目录),可以让Sequelize指向编译后的JS迁移文件:
- 确保
tsconfig.json配置了正确的输出目录,比如:{ "compilerOptions": { "outDir": "./dist", "rootDir": "./src", "target": "ES2020", "module": "CommonJS", // 其他必要配置... }, "include": ["src/**/*"] } - 修改
.sequelizerc,把迁移、模型等路径指向编译后的dist目录:const path = require('path'); module.exports = { config: path.resolve('dist', 'config', 'config.js'), 'models-path': path.resolve('dist', 'models'), 'seeders-path': path.resolve('dist', 'seeders'), 'migrations-path': path.resolve('dist', 'migrations'), }; - 先执行TS编译:
tsc - 再运行迁移命令:
npx sequelize-cli db:migrate
另外,如果你用CLI生成迁移文件,记得加上--extension ts参数,直接生成TS格式的迁移文件:
npx sequelize-cli migration:generate --name create-todo --extension ts
内容的提问来源于stack exchange,提问作者Freweini Beyene
相关产品推荐
相关产品推荐

