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

标签 javascript python flask reactjs tornado

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

最佳答案

2017 - 编辑:任何试图在 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() {});

可选:如果您想完全确定自己处于 prod 模式,您可以创建以下稍微增强的任务,而不是步骤 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 从未设置为“生产”,则会引发以下错误

[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!!!!

关于javascript - 使用 Gulp 时如何将 React 设置为生产模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32526281/

相关文章:

JavaScript - 在处理 ajax 回调之前完成执行

javascript - 站点搜索并在单独的网页中返回结果

python - 在 Python 中通过 SOCKS5 代理代理 UDP

python - 如何使用字典列表中的值更新 Pandas 数据框?

python - 进程池执行器 : TypeError: cannot pickle 'PyCapsule' object

javascript - Jquery 移动双范围 slider 重新加载新范围

javascript - 如何从 JavaScript 中的函数将值设置为 n 维数组?

ios - 如何将 UIImage 从 Swift 上传到 Flask 服务器?

python - 属性错误: 'OAuthRemoteApp' object has no attribute 'authorized_response'

python-3.x - Flask 的异步调用方法