我如何在docker中有条件地运行Sequelize seed data命令,用package.json(或其他位置)中的变量组成?

问题描述 投票:0回答:1

我已经用sequelize orm设置了我的nodejs + mysql rest-api,并安装在docker-compose中。我的package.json的脚本部分如下:

"scripts": {
    "babel": "babel",
    "test": "echo \"Error: no test specified\" && exit 1",
    "migration": "npx sequelize-cli db:migrate",
    "seed": "npx sequelize-cli db:seed:all",
    "start": "",
    "check-types": "tsc",
    "babel:node": "./node_modules/.bin/babel-node --presets=@babel/env --extensions '.js,.ts'",
    "dev": "npm run migration && npm run seed && nodemon --exec npm run babel:node -- app.ts"
}

并且我的CMD [ "npm", "run", "dev" ]中有DockerFile,它将运行dev脚本。但是,我想根据我在package.json中提供的变量有条件地运行种子命令,我期望这样的事情:

"scripts": {
    ..., // same as above
    "enableSeed": true,
    "dev": `npm run migration ${enableSeed? "&& npm run seed" : ""} && nodemon --exec npm run babel:node -- app.ts`
}

但是由于语法,这将无法正常工作,有解决方案吗?

node.js docker docker-compose sequelize.js
1个回答
0
投票

您可以根据环境变量的值使用shell脚本的条件语句。例如:

  "scripts": {
    "test": "jest",
    "dev": "if [[ ${ENABLE_SEED} == \"true\" ]]; then echo 'migration' && echo 'seed' && echo 'nodemon'; else echo 'migration' && echo 'nodemon'; fi"
  },

npm run dev

> if [[ ${ENABLE_SEED} == "true" ]]; then echo 'migration' && echo 'seed' && echo 'nodemon'; else echo 'migration' && echo 'nodemon'; fi

migration
nodemon

启用种子,运行ENABLE_SEED=true npm run dev

> if [[ ${ENABLE_SEED} == "true" ]]; then echo 'migration' && echo 'seed' && echo 'nodemon'; else echo 'migration' && echo 'nodemon'; fi

migration
seed
nodemon

或者,您可以基于package.json中定义的变量的值来运行npm脚本:>

  "scripts": {
    "test": "jest",
    "ENABLE_SEED": "false",
    "dev": "if [[ ${npm_package_scripts_ENABLE_SEED} == \"true\" ]]; then echo 'migration' && echo 'seed' && echo 'nodemon'; else echo 'migration' && echo 'nodemon'; fi"
  },

使用ENABLE_SEED=false,运行npm run dev

> if [[ ${npm_package_scripts_ENABLE_SEED} == "true" ]]; then echo 'migration' && echo 'seed' && echo 'nodemon'; else echo 'migration' && echo 'nodemon'; fi

migration
nodemon
  "scripts": {
    "test": "jest",
    "ENABLE_SEED": "true",
    "dev": "if [[ ${npm_package_scripts_ENABLE_SEED} == \"true\" ]]; then echo 'migration' && echo 'seed' && echo 'nodemon'; else echo 'migration' && echo 'nodemon'; fi"
  },

使用ENABLE_SEED=true,运行npm run dev

> if [[ ${npm_package_scripts_ENABLE_SEED} == "true" ]]; then echo 'migration' && echo 'seed' && echo 'nodemon'; else echo 'migration' && echo 'nodemon'; fi

migration
seed
nodemon

引用package.json中定义的变量的规则是npm_package_<namespace>_Your custom variable

在这种情况下,namespacescripts。因此我们可以使用ENABLE_SEED

引用npm_package_scripts_ENABLE_SEED
© www.soinside.com 2019 - 2024. All rights reserved.