Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在发布之前使用未统一的javascript文件开发_Javascript - Fatal编程技术网

在发布之前使用未统一的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

这个问题是如此简单和常见,但我仍然未能找到一个很好的解决方案。所以我想也许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的引用,如下所示:

<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'>";
    }
}