2016-09-16 32 views
0

我注意到ReactJS有一些只在开发模式下出现的调试消息。在生产版本中从软件包中删除javascript代码

当我在捆绑之前在我的gulpfile.js中设置process.env.NODE_ENV = 'production';时,调试消息消失。

我该如何编写这样的代码,它只出现在开发(调试)版本中,但未捆绑到生产版本中?

类似:

function sayHello(message){ 
    #IF DEBUG 
    if (!message) console.log("message cannot be null"); 
    #ENDIF 

    alert(message); 
} 

编辑: 当我试图用if (process.env.NODE_ENV !== 'production')然后正确地吞掉,丑化删除从包中的代码在生产版本。 但是,在运行时(在浏览器中),process.env.NODE_ENV未定义,并且从未满足条件。

它是如何工作的?

var browserify = require("browserify"); 
var gulp = require('gulp'); 
var uglify = require('gulp-uglify'); 
var source = require('vinyl-source-stream'); 
var buffer = require('vinyl-buffer'); 

process.env.NODE_ENV = 'production'; 

var bundler = browserify({ debug: false }) 
    .require('react') 
    .require('react-dom') 

bundler.bundle() 
    .pipe(source("reactbundle.js")) 
    .pipe(buffer()); 
    .pipe(uglify()) 
    .pipe(gulp.dest(paths.distDir + 'scripts')); 
+0

https://github.com/hughsk/envify –

回答

1

我没有打字稿版本,但你有没有试过gulp-remove-code?您可以用一些注释来包围您的JavaScript,以删除运行生产版本时所需的任何代码。这是从上面的链接页面:

var removeCode = require('gulp-remove-code'); 

gulp.src('./src/file.js') 
    .pipe(removeCode({ production: true })) 
    .pipe(gulp.dest('./dist')) 


//removeIf(production) 
value = JSON.stringify({key: 'value'}, null, 2); 
//endRemoveIf(production) 
+0

应该被接受为正确的答案。尽管StackOverflow充斥着许多涵盖这类问题的其他线程。 – SeanRamzan