我想为我的网站创建一个已编译的 JavaScript 文件。对于开发,我更愿意将 JavaScript 保存在单独的文件中,作为我的自动化脚本的一部分,将这些文件合并为一个文件并在其上运行压缩器。
我的问题是,如果我使用旧的 DOS 复制命令,它还会放入压缩器抱怨的 EOF 标记:
复制 /A *.js 编译的.js /Y
其他人在做什么?
我想为我的网站创建一个已编译的 JavaScript 文件。对于开发,我更愿意将 JavaScript 保存在单独的文件中,作为我的自动化脚本的一部分,将这些文件合并为一个文件并在其上运行压缩器。
我的问题是,如果我使用旧的 DOS 复制命令,它还会放入压缩器抱怨的 EOF 标记:
复制 /A *.js 编译的.js /Y
其他人在做什么?
我推荐使用 Apache Ant 和 YUI Compressor。
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>
要在没有 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 命令很奇怪。
在 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发布的工具 ,也有grunt和gulp插件。
我还想提到一个非常非常有趣的技术,它在像 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