在部署到不同的目录结构时更改依赖关系路径而不是在开发中

时间:2011-06-09 15:51:42

标签: php javascript build

在部署到不同目录结构时需要处理脚本语言中的依赖路径更改的一些常用方法(及其注意事项)是什么?

让构建工具进行文本替换吗? (比如Ant替换?)

比如说,HTML标签中的src路径需要更改,也可能是javascript文件中的AJAX路径和PHP文件中的include。

更新

我几乎整理了我需要的东西。

剩下的唯一问题是通过AJAX发布的URL。目前,此URL位于许多其他参数中的JS配置文件中。然而,它是开发,质量保证和生产之间唯一的变化。

不幸的是,像@prodigitalson建议的动态生成的URL在这里是不可取的 - 我必须支持多种服务器端技术,它会变得混乱。

目前我倾向于将URL参数放入自己的JS文件中,为每个开发,QA和生产部署不同版本的文件,并在部署时另外连接到主配置文件。

1 个答案:

答案 0 :(得分:1)

IMO如果您需要这样做,那么您就会以错误的方式发展。所有这些都应该在配置文件中进行管理。在ephp方面,你应该有一些基于配置值输出路径的亲戚帮助...例如:

<?php echo image_tag('myimage.jpg', array('alt'=>'My Image')); ?>
<?php echo echo javascript_include('myscript.js'); ?>

在这两种情况下,该函数都会根据部署查找javascript和image目录的路径。

对于链接,您应该根据应用程序的本地安装和一组参数生成链接:

<?php echo link_to('/user/profile', array('user_id' => 7)); // output a tag ?>
<?php echo url('/user/profile', array('user_id'=>7)); // jsut get the url ?>

就javascript而言,你不应该在需要更改的js文件中硬编码任何路径。你应该使你的ajax或路径依赖的东西接受参数,然后从你能够使用相同脚本配置的视图发送这些参数..所以oyu可能有类似的东西:

<script type="text/javascript">
  siteNamespace.callAjax(
    '<?php echo url('/user/profile/like', array('user_id' => 7)); ?>',
    {'other': 'option'}
  );
</script>

这样,您可以根据任意数量的变量在中心位置更改所有这些内容。大多数MVC框架都会做这样的事情,虽然代码看起来会有所不同,配置选项会有所不同。

我将看一下Zend Framework MVC - 特别是Config,Router和View Helpers,或者Symfony 1.4及其配置,路由和资产以及Url Helper,用于示例实现。