一尘不染

使用Gulp时如何将React设置为生产模式

flask

我需要在生产模式下运行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() {});

阅读 334

收藏
2020-04-07

共1个答案

一尘不染

任何试图在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!!!!
2020-04-07