WebPACK docs stwierdzają, że output.publicPath
jest:
Z
output.path
widoku JavaScript.
Czy mógłbyś wyjaśnić, co to właściwie oznacza?
Używam output.path
i output.filename
do określania, gdzie Webpack powinien wypisać wynik, ale nie jestem pewien, co należy umieścić output.publicPath
i czy jest to wymagane.
module.exports = {
output: {
path: path.resolve("./examples/dist"),
filename: "app.js",
publicPath: "What should I put here?"
}
}
javascript
webpack
Misza Moroszko
źródło
źródło
path
a kiedy chceszpublicPath
?Odpowiedzi:
output.path
Lokalny katalog dysku do przechowywania wszystkich plików wyjściowych (ścieżka bezwzględna) .
Przykład:
path.join(__dirname, "build/")
Webpack wyśle wszystko do
localdisk/path-to-your-project/build/
output.publicPath
Gdzie przesłałeś swoje spakowane pliki. (W odniesieniu do katalogu głównego serwera)
Przykład:
/assets/
Zakładając, że wdrożyłeś aplikację w katalogu głównym serwera
http://server/
.Przy użyciu
/assets/
aplikacja znajdzie WebPack aktywów pod adresem:http://server/assets/
. Pod maską każdy URL, który napotka webpack, zostanie przepisany na nowo od „/assets/
”.źródło
Po uruchomieniu w przeglądarce webpack musi wiedzieć, gdzie będziesz hostować wygenerowany pakiet. Dzięki temu jest w stanie zażądać dodatkowych fragmentów (w przypadku podziału kodu ) lub plików referencyjnych ładowanych odpowiednio przez moduł ładujący pliki lub moduł ładujący adresy URL .
Na przykład: jeśli skonfigurujesz serwer http do obsługi wygenerowanego pakietu pod
/assets/
, powinieneś napisać:publicPath: "/assets/"
źródło
ścieżka publiczna jest używana tylko do celów programistycznych, Po raz pierwszy zobaczyłem tę właściwość config, ale byłem pewien, że od jakiegoś czasu korzystam z webpackazałóżmy, że umieściłeś cały plik źródłowy js w
src
folderze i skonfigurowałeś swój webpack, aby budować plik źródłowy wdist
folderzeoutput.path
.Ale chcesz podawać swoje zasoby statyczne w bardziej znaczącej lokalizacji, np.
webroot/public/assets
Tym razem możesz użyćout.publicPath='/webroot/public/assets'
, aby w html można było odwoływać się do pliku js<script src="/webroot/public/assets/bundle.js"></script>
.gdy wniosek znajdzie js pod folderze dist
webroot/public/assets/bundle.js
webpack-dev-server
Aktualizacja:
dziękuję Charliemu Martinowi za poprawienie mojej odpowiedzi
original: publicPath służy tylko do celów deweloperskich, nie służy to wyłącznie celom programistycznym
źródło
publichPath
przechwytywanie żądań i zwraca pliki w pamięci.webpack -p
do zbudowania swoich zasobów, a twoje zasoby powinny być obsługiwane przez serwer aplikacji lub serwer nginx zamiast serwera webpack lub oprogramowania pośredniego webpack, więc ta konfiguracja nie jest już przydatna w środowisku produkcyjnym, mam rację ?Możesz użyć publicPath, aby wskazać lokalizację, w której serwer webpack-dev-server będzie obsługiwał swoje „wirtualne” pliki. Opcja publicPath będzie tą samą lokalizacją opcji tworzenia treści dla webpack-dev-server. webpack-dev-server tworzy pliki wirtualne, które będą używane podczas uruchamiania. Te pliki wirtualne przypominają rzeczywiste pliki pakietowe tworzone przez pakiet WWW. Zasadniczo chcesz, aby opcja --content-base wskazywała katalog, w którym znajduje się twoja strona index.html. Oto przykładowa konfiguracja:
webpack-dev-server utworzył folder zasobów wirtualnych wraz z plikiem wirtualnym bundle.js, do którego się odnosi. Możesz to sprawdzić, przechodząc do localhost: 8080 / asset / bundle.js, a następnie sprawdź w aplikacji te pliki. Są one generowane tylko po uruchomieniu serwera webpack-dev-server.
źródło
/build/bundle.js
, będę musiał zmienić pliksrc
w moimindex.html
pliku, prawda?src
wiersz w pliku index.html. W tej chwili wskazuje,"assets/bundle.js"
czy przeniesie się do produkcji, w której będzie pakiet,"build/bundle.js"
więc muszę to zmienić w wierszu html src nasrc="build/bundle.js"
. Czy istnieje bardziej zautomatyzowany sposób?/assets/
na/build
. W ten sposób nie muszę zmieniać indeksu.html. Przeniosłem również plik index.html z folderu kompilacji do katalogu głównego aplikacji.w moim przypadku mam cdn i zamierzam umieścić wszystkie moje przetworzone pliki statyczne (js, imgs, czcionki ...) w moim cdn, załóżmy, że adres URL to http://my.cdn.com/
więc jeśli istnieje plik js, który jest oryginalnym adresem URL odwołania w html, to „./js/my.js”, powinien on stać się http://my.cdn.com/js/my.js w środowisku produkcyjnym
w takim przypadku muszę tylko ustawić publicpath na http://my.cdn.com/, a webpack automatycznie doda ten prefiks
źródło
nazwa_pliku określa nazwę pliku, w którym cały Twój pakiet będzie gromadzony po przejściu przez etap kompilacji.
ścieżka określa katalog wyjściowy, w którym plik app.js (nazwa pliku) zostanie zapisany na dysku. Jeśli nie ma katalogu wyjściowego, webpack utworzy dla ciebie ten katalog. na przykład:
Spowoduje to utworzenie katalogu myproject / Examples / dist iw tym katalogu utworzy app.js , /myproject/examples/dist/app.js . Po zbudowaniu możesz przejść do myproject / Examples / dist / app.js, aby zobaczyć dołączony kod
publicPath: „Co powinienem tu umieścić?”
publicPath określa katalog wirtualny na serwerze WWW, z którego dołączony jest plik, z którego będzie obsługiwany plik app.js. Pamiętaj, że słowo server podczas korzystania z publicPath może być albo webpack-dev-server, albo serwerem ekspresowym lub innym serwerem, którego możesz używać z webpack.
na przykład
ta konfiguracja nakazuje webpackowi spakować wszystkie twoje pliki js w przykłady / dist / app.js i zapisać w tym pliku.
publicPath mówi webpack -dev-server lub serwerowi ekspresowemu, aby obsługiwał ten dołączony plik, czyli przykłady / dist / app.js z określonej wirtualnej lokalizacji na serwerze, tj. / public / asset / js. Tak więc w pliku HTML musisz odwołać się do tego pliku jako
Podsumowując, publicPath przypomina mapowanie pomiędzy
virtual directory
na twoim serwerze ioutput directory
określone przez konfigurację output.path , ilekroć pojawi się żądanie pliku public / resources / js / app.js , plik /examples/dist/app.js zostanie dostarczonyźródło
Dokumentacja webpack2 wyjaśnia to w znacznie bardziej przejrzysty sposób: https://webpack.js.org/guides/public-path/#use-cases
źródło
publicPath jest używany przez webpack do zastępowania ścieżki względnej zdefiniowanej w twoim css do odsyłania do pliku obrazu i czcionki.
źródło