我需要在生产模式下运行React,大概需要在环境中的某处定义以下内容:
process.env.NODE_ENV = 'production';
问题是我在Tornado(一个python网络服务器)而不是Node.js后面运行它。我还使用Supervisord来管理tornado实例,因此尚不清楚如何在运行环境中进行设置。
但是,我确实使用Gulp将jsx文件构建为javascript。
有可能以某种方式在Gulp内部设置吗?如果是这样,我如何检查React是否在生产模式下运行?
这是我的Gulpfile.js:
'use strict'; var gulp = require('gulp'), babelify = require('babelify'), browserify = require('browserify'), browserSync = require('browser-sync'), source = require('vinyl-source-stream'), uglify = require('gulp-uglify'), buffer = require('vinyl-buffer'); var vendors = [ 'react', 'react-bootstrap', 'jquery', ]; gulp.task('vendors', function () { var stream = browserify({ debug: false, require: vendors }); stream.bundle() .pipe(source('vendors.min.js')) .pipe(buffer()) .pipe(uglify()) .pipe(gulp.dest('build/js')); return stream; }); gulp.task('app', function () { var stream = browserify({ entries: ['./app/app.jsx'], transform: [babelify], debug: false, extensions: ['.jsx'], fullPaths: false }); vendors.forEach(function(vendor) { stream.external(vendor); }); return stream.bundle() .pipe(source('build.min.js')) .pipe(buffer()) .pipe(uglify()) .pipe(gulp.dest('build/js')); }); gulp.task('watch', [], function () { // gulp.watch(['./app/**/*.jsx'], ['app', browserSync.reload]); gulp.watch(['./app/**/*.jsx'], ['app']); }); gulp.task('browsersync',['vendors','app'], function () { browserSync({ server: { baseDir: './', }, notify: false, browser: ["google chrome"] }); }); gulp.task('default',['browsersync','watch'], function() {});
任何试图在Gulp中为新项目设置React的人:只需使用create-react-app 步骤一:将以下内容添加到你的gulpfile.js中
gulp.task('apply-prod-environment', function() { process.env.NODE_ENV = 'production'; });
第二步:将其添加到默认任务(或用于服务/构建应用程序的任何任务)中
// before: // gulp.task('default',['browsersync','watch'], function() {}); // after: gulp.task('default',['apply-prod-environment', 'browsersync','watch'], function() {});
可选:如果要绝对确定你处于生产模式,则可以创建以下略有增强的任务,而不是步骤I中的任务:
gulp.task('apply-prod-environment', function() { process.stdout.write("Setting NODE_ENV to 'production'" + "\n"); process.env.NODE_ENV = 'production'; if (process.env.NODE_ENV != 'production') { throw new Error("Failed to set NODE_ENV to production!!!!"); } else { process.stdout.write("Successfully set NODE_ENV to production" + "\n"); } });
如果NODE_ENV从未设置为“ production”,它将抛出以下错误
[13:55:24] Starting 'apply-prod-environment'... [13:55:24] 'apply-prod-environment' errored after 77 μs [13:55:24] Error: Failed to set NODE_ENV to production!!!!