我目前正在将我的节点/快速应用程序转换为生产部署,作为其中的一部分,我需要使其以生产友好模式运行(例如,对stdOut的调试较少,将日志写入不同的地方,告诉发生错误时用户较少等).
我正在努力解决这个问题,因为每当我设置几乎任何类型的变量来调用'生产'模式时,它都不会对程序运行产生影响.
在开发模式下启动时,我的代码通过Gulp运行,并运行此脚本:
#!/usr/bin/env node
var debug = require('debug')('ascema');
var app = require('../app');
app.set('port', process.env.PORT || 3000);
var server = app.listen(app.get('port'), function() {
debug('Express server listening on port ' + server.address().port);
});
Run Code Online (Sandbox Code Playgroud)
如您所知,这只是快速生成器生成的启动脚本.
为了在实时模式下运行它,我为服务器创建了一个替代启动(无论如何我几乎不能使用gulp)并且live.js运行这个:
#!/usr/bin/env node
var app = require('./app.js');
app.set('env', 'production');
console.log('running on Port 3000');
var server = app.listen(3000);
Run Code Online (Sandbox Code Playgroud)
但是,当我app.get('env')
在应用程序中的任何地方使用时(例如在app.js或其各种依赖项中),它仍然会返回"开发",因此我的生产任务都不会发生.
我在这做错了什么?
非常感谢.
Nom*_*man 27
NODE_ENV
执行NodeJS应用程序时,必须在命令行上设置变量.
例如:
NODE_ENV=production node app.js
Run Code Online (Sandbox Code Playgroud)
此外,它NODE_ENV
是一个环境变量,因此如果将其设置在服务器的环境中,则每次执行应用程序时都不需要提供它node app.js
.
您可以在`/ etc/environment'文件中设置环境变量.以下是有关详细信息:https://help.ubuntu.com/community/EnvironmentVariables
通过使用 NPM,您可能会在 package.json 中使用以下脚本:
"scripts": {
"start": "nodemon ./bin/www",
"dev_win": "set NODE_ENV=development && node ./bin/www >> /romba/log/api.log 2>> /romba/log/error.log",
"prod_win": "set NODE_ENV=production && node ./bin/www >> /romba/log/api.log 2>> /romba/log/error.log"
"prod_nix": "NODE_ENV=production node ./bin/www >> /romba/log/api.log 2>> /romba/log/_error.log"
},...
Run Code Online (Sandbox Code Playgroud)
要启动脚本之一,请使用以下命令:
npm run-script prod_win
Run Code Online (Sandbox Code Playgroud)
在 JavaScript 代码中,我检查了条件:
process.env.NODE_ENV.indexOf('production') > -1
Run Code Online (Sandbox Code Playgroud)
或使用 Express.js
app.use((err, req, res, next) => {
req.app.get('env') === 'development' ? ...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20807 次 |
最近记录: |