运行migrate-mongo迁移报SyntaxError: Unexpected token ':'错误如何解决?
问题原因
报错本质是 Node.js 原生不支持直接导入 TypeScript 文件,你的migrate-mongo-config.js是普通JS运行时文件,用require导入了带TS类型语法(比如: string类型标注)的environment.ts,Node 解析非JS语法时识别不了冒号就抛出了错误。
解决方案
方案1:用ts-node运行迁移命令(改造成本最低)
不用修改现有代码,仅调整运行方式即可:
- 安装ts-node开发依赖:
npm install ts-node --save-dev - 调整迁移执行命令,比如原本的
migrate-mongo up改成:npx ts-node ./node_modules/migrate-mongo/bin/migrate-mongo.js up
如果是写在package.json的scripts中,配置如下:
{ "scripts": { "migrate:up": "ts-node ./node_modules/migrate-mongo/bin/migrate-mongo.js up", "migrate:down": "ts-node ./node_modules/migrate-mongo/bin/migrate-mongo.js down" } }
方案2:单独编写JS版本的环境配置
不想额外安装依赖的话,可以单独抽一份适配迁移脚本的JS环境配置:
- 项目根目录新建
env-for-migrate.js:
module.exports = { databaseName: process.env.MODE === 'dev' ? process.env.dataBaseDev : process.env.dataBaseProd }
- 修改
migrate-mongo-config.js的导入逻辑,替换成导入上述JS文件:
const env = require("./env-for-migrate.js") const config = { mongodb: { url: 'mongodbUrl', databaseName: env.databaseName, options: { useNewUrlParser: true, useUnifiedTopology: true, } }, migrationsDir: "migrations", migrationFileExtension: ".js" }; module.exports = config;
方案3:把迁移配置也改为TS格式
如果项目全栈使用TS,可以直接把配置文件切换为TS语法:
- 把
migrate-mongo-config.js重命名为migrate-mongo-config.ts,调整代码适配TS规则:
import { Environments } from "./src/environment/environment.ts"; const config = { mongodb: { url: 'mongodbUrl', databaseName: Environments.databaseName, options: { useNewUrlParser: true, useUnifiedTopology: true, } }, migrationsDir: "migrations", migrationFileExtension: ".js" }; export default config;
- 运行命令时指定TS配置文件:
npx ts-node ./node_modules/migrate-mongo/bin/migrate-mongo.js up --config migrate-mongo-config.ts
内容的提问来源于stack exchange,提问作者farzanmanafi
相关产品推荐
相关产品推荐

