2017-05-29 19 views
7

Chcemy wykorzystać pakiet zbiorczy z Kątowymi 4/maszynopis i KMP Mamy następujące wymaganie w naszej firmie:Pośrednio odwołać zdalnego URL JavaScript

  • Niektóre zespoły tworzenia bibliotek JS, które muszą być scentralizowana (jak CDN)
  • biblioteki te są za pomocą zdalnego adresu URL i nie powinny występować lokalnie w aplikacji (powodem jest to, że te biblioteki zbyt często zmieniać)
  • konsument biblioteki (aplikacji) instaluje pakiet npm korzystania z biblioteki
  • Instalowane lokalnie pakiet npm zawiera plik elewacji JavaScript lub paczkę, która stawia zdalnego odnośnik do biblioteki JS istniejącym za pomocą zdalnego adresu URL
  • Pakiet npm zawiera również plik definicji Typescript
  • Celem jest, że konsument nie robi” t należy dodać znacznik skryptu z adresem URL (nie powinien być tego świadomy)
  • Lokalnie zainstalowany plik JavaScript może być powiązany z kodem aplikacji
  • Nowe wersje biblioteki będą kompatybilne wstecz, jeśli to możliwe

Jaki jest najlepszy sposób na osiągnięcie tego przy pomocy Typescript/Javascript/NPM/Rollup? Używalibyśmy składni ES2015 transpiled do składni commonJS.

+0

Rozwiązanie to jest bardzo ładne, we wszystkich punktach, ale ja polecam ci utrzymuj proste myślenie: utwórz projekt dla swojego librairy w maszynopisie. – jeorfevre

Odpowiedz

1

Rozwiązanie jest zbyt złożone. Zespoły tworzące te biblioteki JS powinny umieścić pakiet za adresem URL. Zespoły powinny umieścić ten adres URL i buforować eTag powinny być włączone na tych pakietach, aby użytkownicy zawsze mieli najnowszą wersję. Jeśli zostanie wdrożona nowa wersja pakietu, klienci http/1 muszą automatycznie ponownie pobrać pakiet.

Użytkownicy muszą sami umieścić adres URL lub można skonfigurować mechanizm z plikami json, w których informacje znajdują się w plikach json (jak manifest).

Twórcy aplikacji mogli otrzymać plik dts przez npm zawierający wszystkie typy biblioteki frameworkingu. Nie musisz importować modułów, ponieważ jest to zdalny adres URL. Nie musisz więc importować niczego, ponieważ gwarantuje się, że biblioteka jest odwoływana ze względu na znacznik skryptu.

2

Nie sądzę, że rollup ma coś podobnego do webpack dll plugin, więc moja odpowiedź może wydawać się niezwiązana, ale myślę, że można założyć, że jest to dobry punkt wyjścia i zacząć szukać czegoś podobnego w pakiecie.

żywa biblioteka w CDN:

  1. Tworzenie DLL wraz z odpowiadającymi mu DLL Reference który dokładnie opisuje, jak wymagają eksportowane modułów.
  2. Użyj ścieżki do samodzielnego wyjaśnienia i zachowaj spójność tak, jak https://cdn.mydomain.com/<libraryName>/<version>/<libraryName>.{js,json,d.ts} (requester powinien dodać ?<cacheBustingUID>, aby uniknąć problemów z buforowaniem klienta).Oprócz normalnej wersji sugeruję również użycie słowa kluczowego latest dla pola version, aby uzyskać always true path, które wskazuje na najnowszą wersję pakietu: (https://cdn.mydomain.com/foo/1.0.0/foo.{js,json,d.ts} i https://cdn.mydomain.com/foo/latest/foo.{js,json,d.ts}).
  3. rozwiązać wszystkie pliki i uruchomić serwer dev (umysł WebPack pozwala powrócić obietnicę jako config)
module.exports = env => { 
    const libs = ((name, version, exts) => (
    exts.map(ext => `https://cdn.mydomain.com/${name}/${version}/${name}.${ext}`) 
))('foo', 'latest', ['js', 'd.ts', 'json']) 

    return Promise 
    .all(libs.map(fetch)) 
    .then([library, definitions, DLLReference] => { 
     // what to do? 
     // you can also inject the dynamic paths through `webpackDefinePlugin` 
    }) 
} 
+0

Odnośnie? . Czy byłoby dobrym pomysłem, aby tego nie robić i używać eTagów na plikach cdn? –

+0

'etags' są zdecydowanie bardziej spójne i jedno nie wyklucza drugiego, więc absolutnie utrzymuj spójność' eTag' i jeśli niektórzy klienci wymuszą świeże pobieranie, może również dołączyć ciąg zapytania. – Hitmands

+0

Nie jestem do końca zaznajomiony z pakietem internetowym, ale jak mogę przeczytać, wtyczka webpack dll służy do tworzenia manifestu js + json dostawcy. Konsument musi następnie umieścić tag