![](/img/trans.png)
[英]docker-compose up with volumes - “no such file or directory” for 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`
}
但是由於語法的原因,這是行不通的,有什么解決方案可以實現這一目標嗎?
根據@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
我實際上想出了一個像這樣的開箱即用的解決方案:
{
"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
。
在這種情況下, namespace
是scripts
。 所以我們可以使用npm_package_scripts_ENABLE_SEED
引用ENABLE_SEED
。
如果 shell 腳本變得更復雜,您最好將它們提取到一個.sh
文件中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.