在部署到生产时设置开发环境标志并消除调试代码

Phi*_*lip 3 javascript ruby environment workflow production

使用Web应用程序时,我经常使用专为生产/服务器和本地环境设计的代码.

我还经常需要停用特定的功能(即js,ruby,rails,java等).

我面临的问题是,有时在发布新版本时我会错过激活或取消激活这些功能.

理想的事情(我认为)就是在部署到服务器之前运行你喜欢的on/off功能.所以你不要错过任何东西.

例.

我在开发时注释掉了一个函数.

JS:

// foobar() FOR PRODUCTION
Run Code Online (Sandbox Code Playgroud)

Ruby On Rails(production.rb):

# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # FOR PRODUCTION
Run Code Online (Sandbox Code Playgroud)

后者,当我需要使用生产设置测试本地的东西,但因为我没有安装特定的环境(nginx,appache)我不能使用它的功能.

我使用Sublime Text 2,3,如果它有一个定义要取消注释/评论的特定功能/代码块的功能,那将会很棒.

你怎么工作所以你不会错过任何东西?

Mik*_*maa 6

这个问题并非特定于Sublime Text或任何文本编辑器,而是一个如何预处理和调试(JavaScript)源代码的一般性问题.

首先,最简单的方法是在代码库中使用某种全局调试标志.

  window.DEBUG = true;

  function log(a, b, c, d) {
       if(DEBUG) {
           console.log(a, b, c, d);
       }
  } 

  if(DEBUG) {
      // Do dev stuff
  } else {
     // Do produection stuff
  }

  log("foobar") // Does not need to be wrapper, as log() itself is functional only in debug mode
Run Code Online (Sandbox Code Playgroud)

您可以根据您的URL设置调试标志:

 if(window.location.href.indexOf("localhost") >= 0) {
     window.DEBUG = true;
 } 
Run Code Online (Sandbox Code Playgroud)

将JavaScript部署到生产环境时,通常通过最小化和捆绑工具来运行它.一个流行的工具是UglifyJS 2,其特点是不断消除.使用此工具运行和部署JavaScript代码时,if(DEBUG) { }部分代码将被删除.

您可以使用Project> Build scripts将任何工具连接到Sublime Text.

对于服务器端代码,您只需根据您的环境设置调试标志.每个框架(Ruby on rails)都有自己的方法,您需要在框架特定问题中询问具体细节.