Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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_Batch File_Compression - Fatal编程技术网

如何将JavaScript文件连接到一个文件中?

如何将JavaScript文件连接到一个文件中?,javascript,batch-file,compression,Javascript,Batch File,Compression,我想为我的网站创建一个编译过的JavaScript文件。对于开发,我更愿意将JavaScript保存在单独的文件中,就像我的自动脚本的一部分一样,将这些文件连接成一个文件并在其上运行压缩器 我的问题是,如果我使用旧的DOS copy命令,它还会放入EOF标记,压缩机会抱怨: 复制/A*.js compiled.js/Y 其他人在做什么?要在不使用EOF的情况下复制,请使用二进制模式: copy /B *.js compiled.js /Y 如果生成的文件仍然具有EOF,则可能来自原始文件之一,

我想为我的网站创建一个编译过的JavaScript文件。对于开发,我更愿意将JavaScript保存在单独的文件中,就像我的自动脚本的一部分一样,将这些文件连接成一个文件并在其上运行压缩器

我的问题是,如果我使用旧的DOS copy命令,它还会放入EOF标记,压缩机会抱怨:

复制/A*.js compiled.js/Y


其他人在做什么?

要在不使用EOF的情况下复制,请使用二进制模式:

copy /B *.js compiled.js /Y
如果生成的文件仍然具有EOF,则可能来自原始文件之一, 它可以通过以下变体进行修复:

copy /A *.js compiled.js /B /Y
/A从原始文件中删除尾随EOF(如果有)和/B防止将EOF附加到结果文件中。如果EOF不在末尾,则源文件将在结尾处被截断。开关的顺序很重要。如果你写信

copy /A *.js /B compiled.js /Y  
-不会删除源文件中的EOF,但仍然不会追加生成的EOF


你自己试试看,我就是从那里得到的。DOS命令很奇怪。

我们创建了一个由以下部分组成的机制:

  • 切碎(用于js和css)
  • 包中的聚合
  • 缓存(http状态)
  • 在开发模式下为发送原始文件
这对你的需求来说可能太多了,但要回答你的问题,其他人做什么,下面是它的工作原理:

  • 一个请求在,比如, /css.aspx?package=core
  • 我们在xml配置文件(其中 例如,声明 包“core”包含这些文件 /js/mootools.js和 /js/swfobject.js)
  • 我们检查是否启用了缩小。例如,在 开发环境我们没有 想要缩小js内容吗 提供了,但写下了 原始文件。对于js,这已经完成 通过document.writes脚本 包括,对于css,我们编写导入规则
  • 如果需要缩小(在生产环境中),我们将检查来自请求的If-modified-since头。如果该客户机已经具有缩小的内容,我们将发送http头304。如果客户端确实需要这些内容,我们会检查缓存中是否有缩小的内容并提供服务。否则,我们将缩小并发送结果
  • 所有这些都分为不同的服务。jsminificationwriter服务中注入了缓存服务。这利用了最初的minificationservice,它只负责minification规则

    这种方法的优点是:

    • 它迫使我们的开发团队在js/css“包”中思考,因此正确地划分功能并将它们分发到需要它们的页面上
    • 在开发过程中,您完全能够进行调试,获得正确的文件和行号
    • 您可以连接任何其他小型化服务实现,如YUI等。JsMin只是我们的第一次拍摄
    • 这是一种适用于不同内容类型的通用方法
    希望这有帮助。如果您愿意,我可以发布一些代码片段来进一步说明。

    您也可以:

    type *.js > compiled.js
    

    我建议使用ApacheAnt和YUI压缩器

    在Ant构建xml中放入类似的内容。 它将创建两个文件,application.js和application-min.js

    <target name="concatenate" description="Concatenate all js files">
        <concat destfile="build/application.js">
            <fileset dir="src/js" includes="*.js" />
        </concat>
    </target>
    
    <target name="compress" depends="concatenate" description="Compress application.js to application-min.js">
        <apply executable="java" parallel="false">
            <filelist dir="build" files="application.js" />
            <arg line="-jar" />
            <arg path="path/to/yuicompressor-2.4.2.jar" />
            <srcfile />
            <arg line="-o" />
            <mapper type="glob" from="*.js" to="build/*-min.js" />
            <targetfile />
        </apply>
    </target>
    

    我将使用第二台yuicompressor,但我使用/packer/


    在asp.net AJAX中,您可以使用“CompositeScript”标记。这将把你所有的脚本合并成一个大的js文件,通过减少http 304s和http 401s的数量来节省带宽

    样本:

     <asp:ScriptManager ID="ScriptManager1" runat="server">
            <CompositeScript>
                <Scripts>
                    <asp:ScriptReference Path="~/Scripts/Script1.js" />
                    <asp:ScriptReference Path="~/Scripts/Script2.js" />
                    <asp:ScriptReference Path="~/Scripts/Script3.js" />
                </Scripts>
            </CompositeScript>
        </asp:ScriptManager>
    

    您也可以尝试(web资源优化器for java),它可以用作构建工具(maven插件)、运行时解决方案(使用过滤器)或命令行工具。它允许您轻松地组织资源,并使用十几个用于bot类型资源的压缩器(js和css)为您处理合并

    定义要合并的资源很容易,如下所示:

    <groups xmlns="http://www.isdc.ro/wro">
      <group name="all">
        <css>/asset/*.css</css>
        <js>/asset/*.js</js>
      </group>
    </groups>  
    
    
    /asset/*.css
    /asset/*.js
    

    免责声明:我是该项目的参与者。

    在您的机器上安装压缩机uglifyjs:

    sudo npm -g install uglify-js
    
    然后可以使用以下命令连接和压缩所有js文件

    cat myAppDir/*.js | uglifyjs > build/application.js
    

    这是一个非常古老的问题,但我想提及的是,也有使用javascript连接javascript的方法!很明显,有了nodejs。。。例如,有作为npm模块发布的工具,如 也有一些插件


    我还想提到一种非常非常有趣的技术,它正在jQuery和Modernizer等大型项目中使用。这两个项目都是完全使用requirejs模块开发的,然后它们使用作为非常智能的连接器。有趣的是,正如您所看到的,jQuery和Modernizer都不需要在requirejs上工作,这是因为它们删除了requirejs的语法惯例,以便在代码中去掉requirejs。所以他们最终得到了一个独立的库,它是用requirejs模块开发的!。由于这一点,他们能够执行库的cutsom构建,以及其他优势。我知道这是一个非常古老的问题,但为了完整起见,我会提到选择继续。它允许您使用NPM的
    require
    函数将项目构建为不同的模块来解析依赖项,然后解析这些依赖项并将整个项目连接到单个文件中

    例如,假设您的项目名为FooBar,您希望输出一个名为
    FooBar.js
    的文件。您需要创建一个
    main.js
    文件作为项目的入口点,需要包含所有模块

    main.js

    require(“./doFoo”);
    需要(“./doB
    
    browserify main.js -o foobar.js
    
    watchify main.js -o foobar.js