Объединить несколько файлов 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 вы можете использовать как минимум три подхода.

  1. Выполнить команду копирования (просто для понимания и поддержки, может повлиять на производительность сборки в случае большого количества выполненных вызовов);
  2. Используйте задачи msbuild ReadLinesFromFile/WriteLinesToFile (достаточно просто, но полученный файл потеряет форматирование)
  3. Используйте.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
Другие вопросы по тегам