Próbuję przejść od Gulp
do Webpack
. W Gulp
Mam zadanie, które kopiuje wszystkie pliki i foldery z / static / folder do / build / folder. Jak zrobić to samo z Webpack
? Czy potrzebuję wtyczki?
javascript
webpack
Witalij Korsakow
źródło
źródło
Odpowiedzi:
Nie musisz kopiować rzeczy, webpack działa inaczej niż gulp. Webpack to pakiet modułów i wszystko, do czego odnosisz się w swoich plikach, zostanie uwzględnione. Musisz tylko określić moduł ładujący.
Więc jeśli napiszesz:
Webpack najpierw spróbuje parsować plik, do którego istnieje odwołanie, jako JavaScript (ponieważ jest to ustawienie domyślne). Oczywiście to się nie powiedzie. Dlatego musisz określić moduł ładujący dla tego typu pliku. Plik - lub URL-ładowarki na przykład wziąć odwołuje plik, umieścić go w folderze wyjściowym WebPACK (która powinna być
build
w danym przypadku) i powrót zakodowanego adresu URL dla tego pliku.Zazwyczaj programy ładujące są stosowane przez konfigurację webpack:
Oczywiście musisz najpierw zainstalować moduł ładujący pliki, aby to zadziałało.
źródło
Wymaganie zasobów za pomocą modułu ładującego pliki to sposób, w jaki przeznaczony jest pakiet WWW ( źródło ). Jeśli jednak potrzebujesz większej elastyczności lub chcesz uzyskać czystszy interfejs, możesz również skopiować pliki statyczne bezpośrednio za pomocą my
copy-webpack-plugin
( npm , Github ). Dla Państwastatic
nabuild
przykład:źródło
Jeśli chcesz skopiować pliki statyczne, możesz użyć modułu ładującego w następujący sposób:
dla plików HTML:
w pliku webpack.config.js:
w twoim pliku js:
./static/ odnosi się do położenia pliku js.
Możesz zrobić to samo z obrazami lub cokolwiek innego. Kontekst jest potężną metodą eksploracji !!
źródło
index.html
w podkatalogu, który tworzy o nazwie_
(podkreślenie), co się dzieje?main.js
Importuje wszystko zstatic
folderu:require.context("./static/", true, /^.*/);
Jedną z zalet, o której wspomniana wtyczka copy-webpack-plug-in , która nie została wcześniej wyjaśniona, jest to, że wszystkie inne metody tu wymienione nadal łączą zasoby w pliki pakietu (i wymagają „gdzieś” lub „zaimportowania” ich gdzieś). Jeśli chcę po prostu przesuwać niektóre obrazy lub częściowe szablony, nie chcę zaśmiecać mojego pakietu javascript z bezużytecznymi odniesieniami do nich, chcę tylko, aby pliki były emitowane we właściwym miejscu. Nie znalazłem innego sposobu na zrobienie tego w pakiecie internetowym. Trzeba przyznać, że nie jest to, do czego pierwotnie przeznaczony był webpack, ale zdecydowanie jest to aktualny przypadek użycia. (@BreakDS Mam nadzieję, że to odpowiada na twoje pytanie - to tylko korzyść, jeśli chcesz)
źródło
Powyższe sugestie są dobre. Ale, aby spróbować bezpośrednio odpowiedzieć na twoje pytanie, sugerowałbym użycie
cpy-cli
w skrypcie zdefiniowanym w twoimpackage.json
.Ten przykład oczekuje
node
gdzieś na twojej ścieżce. Zainstalujcpy-cli
jako zależność programistyczną:npm install --save-dev cpy-cli
Następnie utwórz kilka plików nodejs. Jeden wykonuje kopię, a drugi wyświetla znacznik wyboru i komunikat.
copy.js
checkmark.js
Dodaj skrypt w
package.json
. Zakładając, że istnieją skrypty<project-root>/scripts/
Aby uruchomić sript:
npm run copy
źródło
Najprawdopodobniej powinieneś użyć CopyWebpackPlugin, który został wspomniany w odpowiedzi kevlened. Alternatywnie dla niektórych rodzajów plików, takich jak .html lub .json , można również użyć modułu ładującego raw lub modułu ładującego json. Zainstaluj go przez,
npm install -D raw-loader
a następnie wystarczy dodać kolejny moduł ładujący do naszegowebpack.config.js
pliku.Lubić:
Uwaga: Zrestartuj serwer webpack-dev-server, aby zmiany konfiguracji zostały wprowadzone.
Teraz możesz wymagać plików HTML przy użyciu ścieżek względnych, co znacznie ułatwia przenoszenie folderów.
źródło
Sposób ładowania statycznego
images
ifonts
:Nie zapomnij zainstalować,
file-loader
aby działał.źródło
logo.png
ani nie powinien tworzyć tępej i „miejmy nadzieję” unikatowej nazwy pliku, aby uniknąć globalnej kolizji. Z tego samego powodu używamy modułów CSS .[path][name].[ext]
i zapewniono wiele elastyczności, aby zmodyfikować to dla konkretnego środowiska lub przypadku użycia ... program ładującyMożesz napisać bash w pakiecie.json:
źródło
"build": "webpack && xcopy images dist\\images\\ /S /Y && xcopy css dist\\css\\ /S /Y"
Utknąłem tutaj również. Copy-webpack-plugin działał dla mnie.
Jednak „copy-webpack-plugin” nie był w moim przypadku konieczny (dowiedziałem się później).
webpack ignoruje
przykład ścieżek root
Aby więc działało to bez użycia „copy-webpack-plugin” użyj „~” w ścieżkach
„~” mówi webpackowi, aby traktował „obrazy” jako moduł
Uwaga: może być konieczne dodanie katalogu nadrzędnego katalogu obrazów w
Odwiedź https://vuejs-templates.github.io/webpack/static.html
źródło
Plik konfiguracyjny webpack (w webpack 2) pozwala wyeksportować łańcuch obietnic, o ile ostatni krok zwraca obiekt konfiguracyjny webpack. Zobacz dokumenty konfiguracji obietnicy . Stamtąd:
Możesz utworzyć prostą funkcję kopiowania rekurencyjnego, która kopiuje plik i dopiero wtedy uruchamia pakiet WWW. Na przykład:
źródło
powiedzmy, że wszystkie zasoby statyczne znajdują się w folderze „statycznym” na poziomie głównym i chcesz je skopiować do folderu kompilacji, zachowując strukturę podfolderu, a następnie w pliku wejściowym)
źródło