Скомпилировать проект машинописного текста как локальный модуль

tl;dr

Могу ли я с помощью машинописного текста компилировать разные папки как отдельные библиотеки и импортировать результаты как узел узла?


Например, у меня есть папка common с 800 файлами, а затем несколько app папок (app1, app2 и т. Д.), Каждая с 20 +/- файлами. Все папки app имеют ссылки на классы / интерфейсы / и т. Д. Внутри папки common. Проблема в том, что всякий раз, когда я компилирую папку app, она также компилирует все 800 файлов common. Эта компиляция длится слишком долго, и мне бы очень хотелось ее избежать.

Я проверил и подтвердил это, используя tsc --diagnostics --listFiles как в common, так и в app1.

Я пробовал использовать свойство exclude в tsconfig.json, чтобы игнорировать папку common, но, похоже, это не помогло. Я также пробовал несколько конфигураций baseDir, paths и т.д. в compilerSettings, но безрезультатно.

noResolve кажется, почти достигла того, что я ищу, но безопасно ли это ??

Есть ли способ скомпилировать их отдельно и избежать постоянной перекомпиляции независимого common проекта?


Стек технологий:

  • Угловой 2.0.1
  • SystemJS 0.19.39
  • Машинопись 2.0.3
  • Windows 8.1
  • ASP.NET MVC6

person Jim Buck    schedule 04.10.2016    source источник


Ответы (1)


Разделите вашу общую папку на другой вызов проекта common и превратите его в модули node.js, инструкция здесь:

https://docs.npmjs.com/getting-started/creating-node-modules

Затем в исходном проекте вы делаете следующее:

Способ 1

npm link <folder path of common>

Способ 2

npm install <folder path of common> --save

Метод 1 проще использовать, поскольку обновление до common автоматически отражается в основном проекте, и вам не нужно беспокоиться об обновлении.

Метод 2 хорош, если вы планируете позже опубликовать его как отдельный пакет npm. Однако обновление до common потребует ручного обновления в основном проекте.

В папке common убедитесь, что вы создали файл .npmignore. Допустим, ваш проект common имеет следующую структуру:

.                                                                                                                                                               
├── index.d.ts
├── index.js                                                                                                                                                    
├── lib/  <--- compiled location                                                                                                                               
├── node_modules                                                                                                                                                
├── package.json                                                                                                                                                
├── src/                                                                                                                                                         
├── tsconfig.json                                                                                                                                               
├── typings                                                                                                                                                     
└── typings.json

тогда ваш .npmignore должен выглядеть следующим образом:

.DS_Store
.git
.gitignore
examples
node_modules
npm-debug.log
src
tsconfig.json
typings
typings.json

Вы можете посмотреть мой ng2-simple-mq в качестве примера.

person John Siu    schedule 04.10.2016
comment
Не знаю, действительно ли это решит мою проблему. Я могу отлично собрать все это, просто он делает это неэффективно. Я хочу посмотреть, может ли компилятор vanilla Typescript обрабатывать компиляцию проекта как локального модуля. - person Jim Buck; 04.10.2016
comment
@JimmyBoh На самом деле есть более простой способ. - person John Siu; 04.10.2016
comment
@JimmyBoh Обновлено. - person John Siu; 04.10.2016
comment
Хм, я не думал об использовании npm install <localpath>, это неплохая идея. Но это приведет к появлению вложенных node_module папок (на уровне корневого проекта и внутри каждой app папки), что может быть неплохо. Также, как следует обрабатывать обновления (снова вызвать npm install, поднять версию и т. Д.)? - person Jim Buck; 04.10.2016
comment
@JimmyBoh (1) Проект common было бы лучше расположить вне папки проекта приложения. Таким образом, он стал автономным библиотечным проектом. (2) Подъем версии работает, или ручное удаление его из node_modules приложения тоже работает. - person John Siu; 04.10.2016
comment
Понятно. Я предполагаю, что использование npm link ../common из любой из app папок также является вариантом, аналогичным подходом. - person Jim Buck; 05.10.2016
comment
@JimmyBoh Да, на самом деле npm link кажется более простым в использовании, поскольку обновление пакета common отражается автоматически, после его настройки не требуется никаких дополнительных действий. Обновлю ответ. : D - person John Siu; 07.10.2016
comment
Хотя это кажется невозможным с использованием чистого TypeScript, я думаю, что использование npm link - лучший способ. Спасибо, @John Sui! - person Jim Buck; 07.10.2016