【发布时间】:2015-12-08 04:20:41
【问题描述】:
我需要在生产模式下运行 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() {});
【问题讨论】:
-
从我可以从有关生产与开发的反应文档中收集到的信息,意味着使用不同的工件。见下载页面:facebook.github.io/react/downloads.html
-
React 是通过 npm 安装的,即“npm install react”。在开发和生产之间有一种无缝切换的方式,这就是我在问题中所要求的
-
您可以在生产环境中运行 gulp 之前设置环境变量:NODE_ENV='production' gulp. react 库将从这里读取以删除日志消息和警报,而 uglifyJS 将处理其余的 http://facebook.github.io/react/downloads.html。
标签: javascript python flask reactjs tornado