如何在网站中为JS变量赋值,取决于它是否's正在本地运行或正在生产中

How to assign a value to a a JS variable in a web site depending if it's running locally or in production?

本文关键字:生产中 运行 是否 网站 JS 变量 取决于 赋值      更新时间:2023-09-26

我在笔记本电脑上进行web项目。当我完成后,我会上传我的文件到生产。每次上传到生产版时,我都必须确保将javascript代码中的各种URL更改为生产版URL。例如:

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

我在代码的不同部分有3个类似的url。我经常忘记在上传到制作之前更改它们,结果我破坏了制作网站。

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

我想写:

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

有什么想法吗?

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

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

理想情况下,您有一个部署系统,它可以准备和部署您的应用程序,并在此过程中处理环境差异。例如,我偏爱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';

然后你进一步决定你的环境是什么。

您必须找出服务器端处理、环境变量和部署时间处理的哪种组合最适合您。