2016-10-21 9 views
1

У меня есть проект ASP.NET MVC/Angular2, который использует MSBuild для компиляции моих файлов машинописных файлов. Проект содержит весь исходный код Angular2 и его зависимости NodeJS в дополнение к моему коду Angular2 (app.ts и т. Д.).Исключить каталог из компиляции MSBuild для машинописных файлов

Моя проблема заключается в том, что MSBuild компилирует каждый файл машинописного файла во всем решении, включая исходный код Angular2, его зависимости и код app.ts. Я хочу исключить любые файлы машинописных файлов, расположенные в папке node_modules, из компиляции.

Я понимаю, что tsconfig.json файлы, как правило, отвечают за исключением отдельных файлов или папок из компилируется (см this question), но что .csproj файлы в проекте ASP.NET будет следовать за на tsconfig.json. Поэтому я пытаюсь выяснить, что писать в файле .csproj, чтобы сообщить MSBuild и tsc.exeне для компиляции определенных файлов или папок.

MSBuild Typescript compiler options documentation не помогает. Кто-нибудь знает об этом?

+0

Вы не используете файл tsconfig.json? Я спрашиваю, потому что неясно, есть ли вы и переопределило это 'exclude: []' путем включения файлов в .csproj или что именно происходит. – silentsod

+0

@silentsod Я использую файл 'tsconfig.json'. Мое первоначальное предположение состоит в том, что функция .csproj' аналогична и что '.csproj' контролирует все, что находится в файле' tsconfig.json', поэтому я предполагаю, что есть какой-то оператор XML, который я могу включить в ' .csproj', чтобы исключить файлы машинописных файлов из компиляции в сборке проекта. * Тем не менее, я просмотрел подробный вывод MSBuild, и похоже, что он находит файл 'tsconfig.json' и, по-видимому, читает его, поэтому я не уверен, что' .sproj' делает за кулисами. – alex

+2

Файл .csproj должен содержать только ваши файлы приложений для компиляции, если вы включили что-либо из node_modules, я бы исключил эту папку из вашего проекта. В любом случае вы не должны публиковать ничего прямо из node_modules. Затем, в вашем tsconfig.json, у вас будет ваш 'exclude: ['node_modules', 'typings']' (если вы используете @types вместо типирования, то, очевидно, у вас не будет папки с типизацией). – silentsod

ответ

2

Файл .csproj должен содержать только файлы приложений для компиляции, если вы включили что-либо из node_modules, я бы исключил эту папку из вашего проекта. Это необходимо для предотвращения каких-либо странных попыток компиляции компилятором типа VS. Затем, в вашем tsconfig.json, у вас будет exclude: ['node_modules', 'typings'] (если вы используете @types вместо типирования, то, очевидно, у вас не будет папки с образцами). То же самое, просто не позволяя компилятору трогать эти папки.

Пример tsconfig.json с исключающий на месте:

{ 
    "compileOnSave": true, 
    "compilerOptions": { 
    "target": "es5", 
    "module": "commonjs", 
    "moduleResolution": "node", 
    "sourceMap": true, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "removeComments": true, 
    "noImplicitAny": false, 
    "suppressImplicitAnyIndexErrors": true 
    }, 
    "exclude": [ 
    "node_modules", "typings" 
    ] 
} 

принять вещи шаг дальше и, надеюсь, вам сэкономить некоторое время, когда вы решите развернуть приложение, что я думаю, вы должны учитывать следующее:

Когда дело доходит до развертывания или публикации - в то время как вы можете опубликовать всю папку и ее подпапки, она огромна и занимает много времени. Был еще один подобный вопрос, когда попытка публикации node_module заблокировала коробку dev и, в конечном счете, разбила его VS.

Попытка вручную найти и включить все зависимости: a) очень много времени и b) может свести вас с ума, убедившись, что все включено и только один раз. Я подумал о том, чтобы что-то делать, и отверг его.

Для лучшего или худшего npm и node_modules, смешанных с Windows и ASP.NET, подразумевается путь наименьшего сопротивления, и большинство коэффициентов усиления изучает дополнительный набор инструментов для объединения вашего приложения. Документация немного встряхивается, если вы, скажем, достаточно глупы, чтобы использовать Webpack 2 (в бета-версии, что я и сделал), но результаты состоят в том, что у вас может быть задание на npm-скрипт, задача gulp или что-то еще, созданное только тем, что вы необходимость развертывания. У меня есть папка node_modules 150 + MB, и в конце концов я получаю 1MB (производственный) набор JS-файлов (дрожание дерева велико, и мне это нравится).

Инструменты для рассмотрения SystemJSBuilder с GulpJS (если вы уже используете SystemJS, это естественный путь для принятия), Rollup (у этого была проблема с интерфейсами TypeScript и проблема, которую я подала, была указана как известная и без хорошее исправление), Webpack, и я уверен, что есть еще кое-что, что я забываю и, вероятно, даже пытался.

Существует множество учебных пособий для каждого из них, и у каждого есть здоровое сообщество вокруг них.Угловая команда имеет WebPack учебник, который является хорошим началом, если вы берете этот маршрут: https://angular.io/docs/ts/latest/guide/webpack.html

строитель команды SystemJS имеет свою собственную документацию: https://github.com/systemjs/builder, но я считаю, вы должны объединить его с глотком документацией, чтобы узнать, как это части вместе.

Rollup является немного менее развит, поэтому я использовал их документацию http://rollupjs.org/guide/ и такие примеры, как https://github.com/manfredsteyer/angular2-aot-webpack2-rollup

+0

Большое спасибо за очень проницательный ответ. Попытка собрать все вместе: есть ли предложение использовать GulpJS для компиляции/группировки всех соответствующих материалов Angular2 (исходных файлов, пользовательских модулей и компонентов) в каталог проекта до создания/публикации? – alex

+2

Перед публикацией, определенно, поскольку это делает публикацию/развертывание намного проще и гораздо более легким. Для вашего развития это, возможно, не обязательно, если вы не столкнетесь с серьезными проблемами производительности при загрузке. Я не знаю, какова ваша структура каталогов, но способ, которым мы пошли, заключался в том, чтобы наши собранные файлы были в совершенно другой папке, чем они предназначены для разработки, что означает переключение туда, где указывают наши теги