#angular #cdn
#angular #cdn
Вопрос:
У меня есть два отдельных приложения Angular 2, которые оба используют один и тот же компонент. Это привело к дублированию кода, которое мне не нравится. Есть ли способ разместить где-нибудь общий компонент и удаленно загружать их в эти потребительские приложения? Та же идея, что и файлы, размещенные в CDN.
Комментарии:
1. Будут ли символические ссылки делать то, что вы хотите?
Ответ №1:
Вы могли бы опубликовать свои компоненты в npm. Это не позволит загружать их удаленно, но вы можете ЛЕГКО скомпилировать их в своем приложении и по-прежнему получать довольно хорошие результаты с точки зрения размера и скорости.
Вы также можете поместить их в модуль с отложенной загрузкой, таким образом, компоненты будут загружены позже.
Чтобы опубликовать компонент в npm, вам необходимо выполнить следующие действия:
- Создайте свои компоненты
- В корневом каталоге создайте файл index.ts со следующим экспортом
export * from './src/mycomponent.component';
- Установите Typescript для компиляции
.ts
в.js
npm install --save-dev typescript
- В
package.json
prepublish
разделе создать скриптscripts
для компиляции вашего компонента перед публикацией"scripts": { "prepublish": "tsc" }
- Создайте
tsconfig.json
{ "compilerOptions": { "noImplicitAny": true, "module": "commonjs", "target": "ES5", "emitDecoratorMetadata": true, "experimentalDecorators": true, "sourceMap": true, "declaration": true }, "files": [ "mycomponent.component.ts" ], "exclude": [ "node_modules" ] }
- Добавьте информацию о типах в
package.json
"typings": "./mycomponent.component.d.ts",
- Опубликовать в npm с помощью
npm publish
Это запустит компилятор Typescript перед публикацией файлов в npm.
PS: Вы также можете добавить следующие строки в .npmignore
файл, чтобы публиковались только типизации, но не исходный код.
# Ignored files
*.ts
!*.d.ts
Комментарии:
1. Спасибо, Александр. npm — это не совсем то, что я имел в виду, но это вариант наверняка. Я мог бы пойти в этом направлении.
2. Вы можете публиковать конфиденциально в npm, если вас интересует конфиденциальность.