如何将JavaScript文件连接到一个文件中?
我想为我的网站创建一个编译过的JavaScript文件。对于开发,我更愿意将JavaScript保存在单独的文件中,就像我的自动脚本的一部分一样,将这些文件连接成一个文件并在其上运行压缩器 我的问题是,如果我使用旧的DOS copy命令,它还会放入EOF标记,压缩机会抱怨: 复制/A*.js compiled.js/Y如何将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,则可能来自原始文件之一,
其他人在做什么?要在不使用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状态)
- 在开发模式下为发送原始文件
- 它迫使我们的开发团队在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