在发布之前使用未统一的javascript文件开发
这个问题是如此简单和常见,但我仍然未能找到一个很好的解决方案。所以我想也许Stackoverflow的一些专家可以为我提供关于最佳实践的指导 假设我有几个Javascript模块,并将每个模块放在一个单独的文件中:在发布之前使用未统一的javascript文件开发,javascript,Javascript,这个问题是如此简单和常见,但我仍然未能找到一个很好的解决方案。所以我想也许Stackoverflow的一些专家可以为我提供关于最佳实践的指导 假设我有几个Javascript模块,并将每个模块放在一个单独的文件中: a.js b.js c.js d.js 发布软件时,我将它们连接在一起并缩小: //pseudo command: cat a.js b.js c.js d.js | minify > all.js 然后我在html文件中包含对all.js的引用,如下所示: <scr
a.js
b.js
c.js
d.js
发布软件时,我将它们连接在一起并缩小:
//pseudo command:
cat a.js b.js c.js d.js | minify > all.js
然后我在html文件中包含对all.js的引用,如下所示:
<script src="all.js"></script>
并将其包含在
标记中。这是可行的,但我更希望有单独的文件包括。因此,我必须在html文件中执行此操作:
<script src="a.js"></script>
<script src="b.js"></script>
<script src="c.js"></script>
<script src="d.js"></script>
这一个按照我的预期工作,但在发布代码时,我必须检查所有html文件,并用
替换这4个
标记,这对我的项目来说是太多的工作了,因为有很多html文件,我们有定期的调试/发布周期
一种解决方案是为所有文件设置脚本标记:
<script src="a.js"></script>
<script src="b.js"></script>
<script src="c.js"></script>
<script src="d.js"></script>
<script src="all.js"></script>
但这会在运行时导致4个错误请求。(因为在发布时只有all.js可用)
您将如何解决这个问题?为什么不使用类似javascript的加载程序并动态地为您的文件提供服务
然后,当您投入生产时,您只需要修改headJs调用并只包含缩小的js文件 为什么不使用类似javascript的加载程序,动态地为文件提供服务
然后,当您投入生产时,您只需要修改headJs调用并只包含缩小的js文件 因为我使用的是ASP.NET,所以我会这样解决问题: Default.aspx:
...
Web.config:
将我的所有JS合并到一个文件中
因此,如果您的客户出现错误,您可以要求他将IsDebug
更改为true
,并检查控制台输出(如果您正在使用它),以获取错误的来源。由于我使用的是ASP.NET,因此我将通过以下方式解决此问题:
Default.aspx:
...
Web.config:
将我的所有JS合并到一个文件中
因此,如果您的客户出现错误,您可以要求他将IsDebug
更改为true
,并检查控制台输出(如果您正在使用它),以获得错误的来源。我们要做的是将
替换为服务器端功能,如
此函数配置为呈现此文件的常规脚本引用,或者在缩小模式下,确定文件属于哪个聚合组(您只有一个称为“all”的组,但此方法支持多个聚合组)如果其他一些Require()
调用尚不需要该聚合文件,则为该文件添加脚本引用
这允许我们在开发过程中随意在聚合(+缩小)和非聚合模式之间切换。默认情况下,发布版本配置为使用聚合模式,而开发版本使用原始模式
伪代码:
string RequireScript(string filename)
{
if (!IsAggregated)
{
return "<script src='$(filename)'>";
}
else
{
var group = FindAggregationGroupFor(filename);
if (group in _requiredGroups) return "";
_requiredGroups.Add(group);
return "<script src='/aggregated/$(group).js'>";
}
}
string RequireScript(字符串文件名)
{
如果(!已聚合)
{
返回“”;
}
其他的
{
var group=FindAggregationGroupFor(文件名);
如果(在_requiredGroups中的组)返回“”;
_所需的组。添加(组);
返回“”;
}
}
我们要做的是将
替换为服务器端功能,如
此函数配置为呈现此文件的常规脚本引用,或者在缩小模式下,确定文件属于哪个聚合组(您只有一个称为“all”的组,但此方法支持多个聚合组)如果其他一些Require()
调用尚不需要该聚合文件,则为该文件添加脚本引用
这允许我们在开发过程中随意在聚合(+缩小)和非聚合模式之间切换。默认情况下,发布版本配置为使用聚合模式,而开发版本使用原始模式
伪代码:
string RequireScript(string filename)
{
if (!IsAggregated)
{
return "<script src='$(filename)'>";
}
else
{
var group = FindAggregationGroupFor(filename);
if (group in _requiredGroups) return "";
_requiredGroups.Add(group);
return "<script src='/aggregated/$(group).js'>";
}
}
string RequireScript(字符串文件名)
{
如果(!已聚合)
{
返回“”;
}
其他的
{
var group=FindAggregationGroupFor(文件名);
如果(在_requiredGroups中的组)返回“”;
_所需的组。添加(组);
返回“”;
}
}
您也可以只编写一个头文件,然后将其作为基本模板系统以友好方式包含在网站的每个页面上
因此,您只需修改一个文件即可编辑所有页面
这里有一个例子:您也可以只编写一个头文件,然后将其作为基本模板系统以友好方式包含在网站的每个页面上
因此,您只需修改一个文件即可编辑所有页面
下面是一个例子:
<configuration>
<appSettings>
<add key="IsDebug" value="true"/>
</appSettings>
</configuration>
string RequireScript(string filename)
{
if (!IsAggregated)
{
return "<script src='$(filename)'>";
}
else
{
var group = FindAggregationGroupFor(filename);
if (group in _requiredGroups) return "";
_requiredGroups.Add(group);
return "<script src='/aggregated/$(group).js'>";
}
}