如何为网站中的JS变量赋值,具体取决于它是在本地还是在生产中运行?

时间:2014-10-28 05:30:57

标签: javascript variables production-environment

我在笔记本电脑上处理网络项目。当我完成后,我将文件上传到制作中。每次上传到制作时,我都要确保将javascript代码中的各种网址更改为生产网址。例如:

var ping_url = 'http://10.10.128.233'      // locally
//var ping_url = 'http://ping.service.com' // in production

我在代码的不同部分有3个这样的网址。我经常忘记在上传到制作之前更改它们,结果我打破了生产网站。

有没有办法检查我是否在笔记本电脑或生产中运行网站?

我想写:

if (local) {
  var ping_url = 'http://10.10.128.233'      // locally
}
else {
  var ping_url = 'http://ping.service.com' // in production
}

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您可以随时检查location.hostname并将其与'localhost'或您在笔记本电脑上使用的任何主机名进行比较。例如

var ping_url = ~location.hostname.indexOf('localhost')
    ? 'http://10.10.128.233' : 'http://ping.service.com'

答案 1 :(得分:2)

理想情况下,您有一个部署系统,可以准备和部署您的应用程序,并在此过程中处理环境差异。例如,我偏向Capistrano。要部署我的项目,我在命令行上键入cap deploy,它运行构建/打包/配置脚本,将站点上载到服务器,然后在那里运行迁移后脚本。您可以在此过程中部署不同的配置文件,或者在此过程中对Javascript文件进行后处理。有很多不同的方法来改变这种变化,所有这些都适用于不同的目的。

如果您使用任何类型的服务器端语言,则可能需要使用以下任何一种语言:

<?php if (...) : ?>
    var ping_url = '...';
<? else : ?>
    var ping_url = '...';
<?php endif; ?>

var ping_url = <?php echo json_encode($config['pingUrl']); ?>;

环境变量在这里非常有用;即在您的Apache配置或.htaccess文件中,您可以使用以下内容:

SetEnv MYAPP_ENVIRONMENT production

在您的应用中,您可以按照以下方式执行操作:

$environment = getenv('MYAPP_ENVIRONMENT') ?: 'development';

然后你会进一步决定你的环境。

您必须弄清楚服务器端处理,环境变量和部署时间处理的哪种组合最适合您。