如何将 JavaScript 文件连接成一个文件?

IT技术 javascript batch-file compression
2021-02-28 07:21:16

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

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

复制 /A *.js 编译的.js /Y

其他人在做什么?

6个回答

我推荐使用 Apache Ant 和 YUI Compressor。

http://ant.apache.org/

http://yui.github.com/yuicompressor/

把这样的东西放在 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>
Unexpected element "{}target" {antlib:org.apache.tools.ant}target给我带来了一个错误。有任何想法吗?
2021-04-16 07:21:16
几年前我停止使用 Ant。现在我使用 Node 来处理这些事情。看看这个:mechanics.flite.com/blog/2012/06/19/...
2021-04-30 07:21:16

要在没有 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 命令很奇怪。

我尝试了您的建议,但我仍然得到: 作为文件加入位置之间的标记...感谢您查看此内容。
2021-04-20 07:21:16
看来我明白了, 是一个 UTF8 前缀字节。它应该在文件的最开始,否则它会被视为数据并且你的编译器会抱怨它。这不是EOF问题。并且您不能使用副本。
2021-05-11 07:21:16
奇怪的是 /B 选项对我的文件没有影响
2021-05-12 07:21:16

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

样本:

 <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>

有关更多信息,请参见此处:http : //msdn.microsoft.com/en-us/library/cc488552.aspx

这是一个非常古老的问题,但我想提一下,还有使用 javascript 连接 javascript 的方法!使用 nodejs 显然......例如,有像这样的npm module发布的工具 ,也有gruntgulp插件。

我还想提到一个非常非常有趣的技术,它在像 jQuery 和 Modernizr 这样的大型项目中被使用。这两个项目完全是用 requirejs module开发的,然后他们使用requirejs 优化器作为一个非常智能的连接器。有趣的是,正如您所看到的,jQuery 和 Modernizr 都不需要 requirejs 才能工作,这是因为它们删除了 requirejs 语法规则,以便在代码中去掉 requirejs。所以他们最终得到了一个用 requirejs module开发的独立库!多亏了这一点,他们能够执行库的 cutom 构建,以及其他优势。是一篇博客文章,更详细地解释了所有这些。

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

sudo npm -g install uglify-js

然后可以使用下面的命令来连接和压缩所有js文件。

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