在我的docker-compose.yml中,我设置了环境NODE_ENV
node2:
image: ...
environment:
- "NODE_ENV=production"
我的Dockerfile,
FROM node:latest
... //all the ususal stuff
CMD ["npm", "start"]
我的晚上,
"scripts": {
"start": "NODE_ENV=development node --inspect ./bin/www"
},
但是当我运行docker-compose时,我发现nodejs代码仍然在开发中运行,而不是在生产中运行。那是为什么?
我的第二个问题是在这里实现我想做什么的正确方法是什么,在没有docker的情况下运行我的nodejs,即使用npm start
,我希望它在开发模式下运行,但在生产中运行docker模式?
----更新-----
对于我现在的第一个问题,我理解我的npm start
覆盖了docker-composer.yml中的NODE_ENV = production,而不是相反。
但是对于我的第二个问题,我仍在寻找一个简单的解决方案。
感谢我到目前为止的答案。
答案 0 :(得分:-1)
我的第一个猜测是在i1 <- order(mat)
cbind(row(mat)[i1], col(mat)[i1])
# [,1] [,2]
#[1,] 1 3
#[2,] 3 1
#[3,] 2 2
#[4,] 2 3
#[5,] 1 1
#[6,] 3 3
#[7,] 1 2
#[8,] 2 1
#[9,] 3 2
中为不同的环境设置不同的npm script
条目,例如用于生产的package.json
和用于开发/调试的start
- with { {1}}。
但是,如果你想坚持使用一个inspect
,那么你可以考虑使用ENV_VARS
script
的{{1}}默认值,如果它还没有set(由Docker提供):
bash
参考文献:
http://www.tldp.org/LDP/abs/html/parameter-substitution.html
https://glebbahmutov.com/blog/shell-variables-in-npm-scripts/
答案 1 :(得分:-1)
这篇文章“Working with Environment Variables in Node.js”给了我一些思考。
所以我首先使用了if-env,因为它建议我的npm script
看起来很喜欢这个,
"scripts": {
"start": "if-env NODE_ENV=production && npm run start:prod || npm run start:dev",
"start:dev": "DEBUG=dummy-app:* node --inspect ./bin/www",
"start:prod": "node ./bin/www"
}
但正如https://github.com/ericclemmons/if-env/issues/6所说,更重要的是,我需要一种简单的方法来设置环境变量并覆盖它们,如果有必要,现在我使用per-env,我的npm script
看起来像这样,< / p>
"per-env": {
"production": {
"DBPASS":"superman", //this can be overwrote again
},
"development":{
"DBPASS":"batman",
"DEBUG":"dummy-app:*",
}
},
"scripts": {
"start":"per-env",
"start:development": "node --inspect ./bin/www",
"start:production": "node ./bin/www"
},