Załóżmy, że mam taką klasę (napisaną na maszynie) i dołączam ją do pakietu internetowego do bundle.js
.
export class EntryPoint {
static run() {
...
}
}
W moim index.html umieszczę pakiet, ale potem chciałbym również wywołać tę statyczną metodę.
<script src="build/bundle.js"></script>
<script>
window.onload = function() {
EntryPoint.run();
}
</script>
Jednak EntryPoint
w tym przypadku jest niezdefiniowany. Jak mógłbym wtedy wywołać dołączony javascript z innego skryptu?
Dodano : plik konfiguracyjny Webpack .
var EntryPoint = require('EntryPoint')
w twojejonload
metodzie brakuje czegoś podobnego .require
może być konieczne, ale tak samo jak w przypadku importu poniżej, mówirequire is not defined
. To, co próbuję zrobić, to użyć dołączonej zawartości ze zwykłego javascript, czy nie potrzebowałbym ponownie jakiejś strukturyrequire
? Ale staram się tego uniknąć. Mam nadzieję, że to ma sens.Odpowiedzi:
Wygląda na to, że chcesz udostępnić pakiet webpack jako bibliotekę . Możesz skonfigurować pakiet webpack, aby udostępnić swoją bibliotekę w kontekście globalnym w ramach własnej zmiennej, takiej jak
EntryPoint
.Nie znam języka TypeScript, więc w przykładzie zastosowano zwykły JavaScript. Ale ważnym elementem jest tutaj plik konfiguracyjny pakietu internetowego, a konkretnie
output
sekcja:webpack.config.js
index.js
Wtedy będziesz mógł uzyskać dostęp do swoich metod bibliotecznych zgodnie z oczekiwaniami:
Sprawdź sedno faktycznego kodu.
źródło
library: ["GlobalAccess", "[name]"],
. To sprawia, że zmienna staje się obiektem z elementami składowymi dla każdego punktu wejścia: GlobalAccess.EntryPointFoo, GlobalAccess.EntryPointBar itp.nam run build
ale nie działa w przypadku używania środowiska deweloperskiegowebpack-dev-server
. Mój wyeksportowany EntryPoint jest pustym obiektem. Jakieś pomysły?export function run() {}
frommodule.exports = ...
Udało mi się to uruchomić bez żadnych dalszych
webpack.config.js
modyfikacji, po prostu używającimport
instrukcji, którą wywołałem z mojego pliku main / index.js:Dla odniesienia, oto mój
weback.config.js
plik.Początkowo próbowałem wykonać to samo użycie
require
, jednak przypisało to opakowanie modułuwindow.EntryPoint
w przeciwieństwie do rzeczywistej klasy.źródło
Uncaught SyntaxError: Unexpected token import
. Czy też jest windex.js
pakiecie (widzę to jako punkt wejścia, ale nie jestem pewien)?W moich okolicznościach mogłem wywołać funkcję z pakietu JavaScript z innego skryptu, zapisując funkcję w oknie podczas jej tworzenia.
Nie mogłem używać Babel, więc to zadziałało.
źródło
Miałem podobne wyzwanie, chciałem stworzyć pakiet dla wielu stron w ramach podróży i chciałem, aby każda strona miała swój własny punkt wejścia do kodu i bez osobnego pakietu dla każdej strony.
Oto moje podejście, które jest bardzo podobne do Kurta Williamsa, ale z nieco innego punktu widzenia, również bez zmiany konfiguracji webpacka:
JourneyMaster.js
Następnie przykład, jak nazywam te metody na końcu
html
strony:źródło
WEBPACK.CONFIG.JS
1. KORZYSTANIE Z UMD
index.html
main.js
2. UŻYWANIE VAR
index.html
main.js
3. UŻYWANIE AMD jako biblioteki, której używamy (dla tych, którzy chcą zrobić lib)
źródło
Załączniki:
mypage.html:
źródło