Budynek przy użyciu rollup obsługuje zewnętrzne i globalne.

Możemy importować moduł w kodzie i powiedz go jako zewnętrzny, a następnie {x0}} nie obejmuje go w wiązce.

Jeśli damy mu globalną, to "ustawia", który importujący wynikowy do globalnego pakietu {X0}}.

Ale czyniąc to samo za pomocą przy użyciu sapper przechowuje moduł jako zewnętrzny, a następnie kompilacja serwera pracuje normalnie, ale kompilacja klienta nie rozważa globalów, ale próbuje zrobić "import" w przeglądarce, i zawodzi, z TypeError,

": Nie udało się rozwiązać specyfikatora modułu" ... "'.

Czy można zachować bibliotekę jako zewnętrzną budowę {X0}} Budować klienta i kieruj go, aby użyć globalnego zamiast importowania? Lub dostaję tu kilka podstawowych fundamentów?

0
damodarreddy challa 30 listopad 2019, 22:20

1 odpowiedź

Najlepsza odpowiedź

Gdy trzymasz moduł zewnętrzny do pakietu, co faktycznie oznacza, że deklaracja import jest zachowana w wygenerowanym kodzie. Więc jeśli masz coś takiego

import foo from 'foo';

Następnie twój kod serwera będzie miał coś w rodzaju

const foo = require('foo');

(Które dzieła, z powodu algorytmu rozdzielczości modułu węzła), aw Twoim kliencie JS będziesz skończyć z dokładnieym import ... który nie pracuje w przeglądarkach, Ponieważ ścieżki importowe muszą być względne. (Może to zmienić w przyszłości z mapami importowymi.)

Najłatwiejszym rozwiązaniem nie jest używanie external i po prostu pozwól, aby rękojeść go wkład (mógłbyś to zrobić tylko dla klienta). Ale jeśli chcesz, abyś mógł użyć globalnego zamiast, możesz użyć {{x1 }}:

plugins: [
  virtual({
    foo: `export default window.foo`
  }),
  // ...
]

Następnie dodaj znacznik <script> w src/template.html, który wskazał na plik w static.

0
Rich Harris 30 listopad 2019, 20:57