我已经用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`
}
但是由于语法,这将无法正常工作,有解决方案吗?
您可以根据环境变量的值使用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
。因此我们可以使用ENABLE_SEED
npm_package_scripts_ENABLE_SEED