Объединить несколько файлов jscript в один с задачей msbuild?
Я использую Microsoft Ajax Minifier для преобразования file1.js в file1.min.js. Теперь я хотел бы взять file1.min.js и file2.min.js и объединить их в файлы-merged.min.js.
Я нашел несколько проектов msbuild с открытым исходным кодом, но без документации о том, как их использовать!
Я использую Visual Studio 2010, это то, что Ajax Minifier может сделать, если нет у вас какие-либо советы о том, как это сделать?
Я хочу, чтобы это был автоматизированный процесс, выполняемый каждый раз, когда я создаю решение.
3 ответа
В рамках решения MSBild вы можете использовать как минимум три подхода.
- Выполнить команду копирования (просто для понимания и поддержки, может повлиять на производительность сборки в случае большого количества выполненных вызовов);
- Используйте задачи msbuild ReadLinesFromFile/WriteLinesToFile (достаточно просто, но полученный файл потеряет форматирование)
- Используйте.NET File.ReadAllText/WriteLinesToFile (хороший результат, но может быть сложным в некоторых случаях)
Выполнение команды копирования
Чтобы объединиться с командой копирования, вы должны добавить что-то вроде этого в вашу цель:
<Exec Command="COPY /b file1.min.js + file2.min.js files-merged.min.js" />
В большинстве случаев этого должно быть достаточно.
Использование задач MSbuild ReadLinesFromFile/WriteLinesToFile
<ItemGroup>
<SourceFiles Include="file1.min.js;file2.min.js" />
</ItemGroup>
<ReadLinesFromFile File="%(SourceFiles.Identity)">
<Output TaskParameter="Lines" ItemName="FileLines" />
</ReadLinesFromFile>
<WriteLinesToFile File="files-merged.min.js" Lines="@(FileLines)" Overwrite="true" />
В этом примере показано, как использовать встроенные средства msbuild для объединения обоих файлов. К сожалению, в этом случае мы теряем форматирование файла.
Использование.NET File.ReadAllText() и msbuild WriteLinesToFile
<ItemGroup>
<SourceFiles Include="arrays.cmd;cp.cmd" />
<FileLines Include="$([System.IO.File]::ReadAllText(%(SourceFiles.Identity)))" />
</ItemGroup>
<WriteLinesToFile File="test.out" Lines="@(FileLines)" Overwrite="true" />
Этот подход быстрый и точный, но использует какую-то инъекцию.NET.
Я сделал это, следуя этой статье:
http://encosia.com/2009/05/20/automatically-minify-and-combine-javascript-in-visual-studio/
Я бы предпочел не использовать инструмент JSMin, так как у меня уже есть AJAX Minifier, поэтому я использую JSMin просто для объединения файлов. Может ли Minifier справиться со слиянием файлов?
C:\Progra~1\Microsoft\Micros~1\AjaxMin.exe js1.js js2.js -o jscombine.js -clobber