2016-10-23 3 views
1

Я разрабатываю структуру, опубликованную в NPM, и все работает нормально. Но что-то действительно болит, когда я использую свою собственную инфраструктуру как внешний модуль. Я должен установить импорт с полными путями, как это:Напишите легко расходуемые рамки машинописного текста

import { MyService } 'myframework/all/the/internal/path/myservice.service'; 

И я должен сделать один другой оператор импорта для каждого компонента класса, услуг или веб-я использую из моей структуры. Это, я полагаю, потому, что файлы декларации не экспортируются из верхнего файла index.d.ts.

Благодаря Matthias247 я правильно написал файлы реэкспорта, в которых я экспортирую все классы в свои рамки. А при использовании его в качестве внешнего модуля НОГО, он хорошо работает, и я могу написать все импорт как то:

import {MyService, MyClass1, MyClass2, ... } from 'myframework'; 

Теперь, когда это работает, я пытался сделать мой скомпилирован JavaScript файлов одиночного bundle.js быть загружены SystemJS так же, как @angular модули.

И это, где я действительно, полностью потерял ... Я не могу понять, что является или должно быть правильным способом построить такой комплект. Используя функцию браузера, каждая команда не работает, записывая «NO_MODULE_FOUND» в мой пакет bundle.js. Итак, я попытался использовать tsify для запуска в качестве плагина для браузера, и похоже, что он делает правильную работу, собирая все классы в одном комплекте. Но небольшая проблема, это также связывает все @angular и RxJS.

Пожалуйста, может ли кто-нибудь направить меня на то, как предполагается создать пакет UMD? Я компилирую с опцией «module: commonjs», но поскольку любой файл распознается как модуль, прокручивая браузер, я действительно не знаю, что делать.

ответ

1

Одно из возможных решений (и один я предлагаю), чтобы настроить экспорт вашей библиотеки лучше, так что вы будете в состоянии сделать

import {MyService, MyClass1, MyClass2, ... } from 'myframework'; 

в конце концов, даже если эти виды могли бы быть определены во вложенной папке вашей структуры.

Обычный способ сделать это - использовать реэкспорт. В основной папке вашего фреймворка вы можете иметь некоторый index.ts, в то время как реэкспортировать все типы, которые действительны для пользователя.

Как

export * from 'myframework/all/the/internal/path/myservice.service'; 

Для того, чтобы не ссылаться на все типы из основного индексного файла вы также можете сделать это в иерархическом порядке. Например. определите файл index.ts также в подпапках, например myframework/all/the/internal/path/index.ts и экспортируйте все типы из этой папки в него. Затем на более высоком уровне экспортируйте подпапку: export * from 'myframework/all/the/internal/path';

+0

Ну, я уже это делаю, как я объяснил. Моя проблема заключается в разрешении пути выполнения. При загрузке моей фреймворк в качестве модуля SystemJS он пытается импортировать «http: // host/myframework/dist», и он не работает, я получаю 404, потому что он должен перейти к «http: // host/myframework/dist /feature/feature.class "или что-то в этом роде. – Elvynia

+1

Вы этого не делаете. Вы написали, что вы внедрили файл .d.ts, который изменит объявления, но не повлияет на экспорт кода и загрузку во время выполнения. Я рекомендовал написать файл ts (no .d), который реализует реэкспорт. Это изменяет сгенерированный код и исправляет вашу проблему во время выполнения, так как импорт основного файла индекса также будет импортировать остальные. – Matthias247

+0

Действительно! Фактически, смотря на файлы index_modules/@ angular/core, меня обманывают, потому что они используют пакет umd и не нуждаются в том же, что и я.Я уже имел иерархическую реэкспорту, как вы предлагали, но я просто пытался использовать файлы поддельных индексов (.d.ts и .js). Поэтому теперь я использую свой основной index.js (сгенерированный из реального index.ts) из моей папки dist и работает во время выполнения. Большое спасибо ! :) Но мне все же хотелось бы понять, как создать пакет UMD с браузером, поэтому я отредактирую свой вопрос и подожду, прежде чем пометить ваш ответ как принятый. – Elvynia

Смежные вопросы