Node.js Type Module环境下Sequelize种子文件运行问题咨询
解决方法
方法1:临时覆盖模块类型执行命令
直接在package.json的scripts里新增脚本,利用NODE_OPTIONS环境变量临时切换到CommonJS模式运行Sequelize命令,完全不用手动修改package.json:
{ "scripts": { "seed:update": "NODE_OPTIONS=\"--input-type=commonjs\" npx sequelize db:seed --seed src/db/seeders/000-updates.js" } }
之后在根目录直接执行:
npm run seed:update
--input-type=commonjs会让Node.js临时以CommonJS模式处理Sequelize CLI脚本,不影响项目原本的ES模块配置。
方法2:自动修改并恢复package.json
如果方法1不生效,可以写个自动脚本帮你完成修改→执行→恢复的流程:
- 在根目录创建
run-seed.sh脚本文件:
#!/bin/bash # 读取原type字段值 ORIGINAL_TYPE=$(grep -o '"type": "[^"]*"' package.json | cut -d'"' -f4) # 修改为commonjs sed -i '' 's/"type": "[^"]*"/"type": "commonjs"/' package.json # 执行种子命令 npx sequelize db:seed --seed src/db/seeders/000-updates.js # 恢复原type字段 sed -i '' "s/\"type\": \"commonjs\"/\"type\": \"$ORIGINAL_TYPE\"/" package.json
- 给脚本添加执行权限:
chmod +x run-seed.sh
- 在package.json里新增脚本:
{ "scripts": { "seed:update": "./run-seed.sh" } }
执行时同样跑npm run seed:update,脚本会自动完成所有操作。
额外提示
如果你的Sequelize是v6及以上版本,也可以直接配置ES模块支持:
- 把Sequelize配置文件改成ES模块格式(比如命名为
sequelize.config.mjs) - 在命令里指定该配置文件:
npx sequelize db:seed --seed src/db/seeders/000-updates.js --config sequelize.config.mjs
这种方式不需要修改package.json的type,只要确保配置文件符合ES模块语法即可。
内容的提问来源于stack exchange,提问作者Bennyh961
相关产品推荐
相关产品推荐

