簡體   English   中英

我如何有條件地運行 docker 中的 Sequelize 種子數據命令與 package.json(或其他地方)中的變量組合?

[英]How can I conditionally run the Sequelize seed data command in docker compose up with a variable in package.json(or somewhere else)?

我已經使用 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"
}

我的DockerFile中有CMD [ "npm", "run", "dev" ]將運行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`
}

但是由於語法的原因,這是行不通的,有什么解決方案可以實現這一目標嗎?

更新 1

根據@slideshowp2 的建議進行了嘗試

"dev-seed": "npm run migration && npm run seed-reset && nodemon --exec npm run babel:node -- app.ts"
"dev-no-seed": "npm run migration && nodemon --exec npm run babel:node -- app.ts"
"ENABLE_SEED": "false"
"dev": "if [[ ${npm_package_scripts_ENABLE_SEED} == \"true\" ]]; then echo 'dev-seed'; else echo 'dev-no-seed'; fi"

但我收到了

sh: 1: [[: not found 

這似乎意味着沒有找到dev-no-seed

更新 2

我實際上想出了一個像這樣的開箱即用的解決方案:

{
  "seed": "npx sequelize-cli db:seed:all",
  "unseed": "npx sequelize-cli db:seed:undo:all",
  "seed-reset": "npm run unseed && npm run seed ",
  "dev-seed": "npm run migration && npm run seed-reset && nodemon --exec npm run babel:node -- app.ts",
  "dev-no-seed": "npm run migration && nodemon --exec npm run babel:node -- app.ts",
  "dev": "npm run dev-no-seed" // <----switch between dev-seed and dev-no-seed
}

您可以根據環境變量的值使用 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 所以我們可以使用npm_package_scripts_ENABLE_SEED引用ENABLE_SEED

如果 shell 腳本變得更復雜,您最好將它們提取到一個.sh文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM