Próbuję zautomatyzować przechodzenie do / dist. Mam następujące config.js:
module.exports = {
context: __dirname + "/lib",
entry: {
main: [
"./baa.ts"
]
},
output: {
path: __dirname + "/dist",
filename: "foo.js"
},
devtool: "source-map",
module: {
loaders: [
{
test: /\.ts$/,
loader: 'awesome-typescript-loader'
},
{ test: /\.css$/, loader: "style-loader!css-loader" }
]
},
resolve: {
// you can now require('file') instead of require('file.js')
extensions: ['', '.js', '.json']
}
}
Chcę również dołączyć main.html z katalogu, który znajduje się obok / lib, do folderu / dist podczas uruchamiania pakietu. W jaki sposób mogę to zrobić?
AKTUALIZACJA 1 2017_____________
Moim ulubionym sposobem na zrobienie tego teraz jest użycie html-webpack-plugin
z plikiem szablonu. Dzięki również przyjętej odpowiedzi! Zaletą tego sposobu jest to, że do pliku indeksu zostanie dodany także dołączony link js!
-loader
przyrostka. np.require('file-loader?name=[name].[ext]!../index.html');
{ test: /index\.html/, loader: 'file-loader', query: { name: '[name].[ext]' }
do swojejloaders
tablicy w pliku konfiguracyjnym webpack, tylko nie mogłem uzyskać serwera webpack-dev-server, który mógłby go obsłużyć, co prowadziło, co zabawne, do żądania 404/
(root nie istnieje !).Dodam opcję do odpowiedzi VitalyB:
Opcja 3
Via npm. Jeśli uruchamiasz swoje polecenia za pomocą npm, możesz dodać tę konfigurację do pliku package.json (sprawdź tam również plik webpack.config.js). W celu opracowania uruchomienia
npm start
nie trzeba w tym przypadku kopiować pliku index.html, ponieważ serwer WWW zostanie uruchomiony z katalogu plików źródłowych, a plik bundle.js będzie dostępny z tego samego miejsca (plik bundle.js będzie żył tylko w pamięci, ale będzie dostępny tak, jakby był umieszczony razem z plikiem index.html). Do uruchomienia produkcyjnegonpm run build
folder dist będzie zawierać plik bundle.js, a plik index.html zostanie skopiowany za pomocą starego, dobrego polecenia cp, jak widać poniżej:Aktualizacja: Opcja 4
Istnieje wtyczka copy-webpack , jak opisano w odpowiedzi Stackoverflow
Ale generalnie, z wyjątkiem samego „pierwszego” pliku (takiego jak index.html) i większych zasobów (takich jak duże obrazy lub wideo), dołącz css, html, obrazy itd. Bezpośrednio do Twojej aplikacji za pośrednictwem,
require
a webpack je dla ciebie uwzględni (cóż, po prawidłowej konfiguracji z modułami ładującymi i prawdopodobnie wtyczkami).źródło
Możesz użyć CopyWebpackPlugin . Działa tak:
źródło
package.json
są używane tylko do prostych rzeczy, takich jak uruchomienie testera lub serwera deweloperskiego.Powiedziałbym, że odpowiedź brzmi: nie możesz. (a przynajmniej: nie powinieneś). Nie to powinien robić Webpack. Webpack jest pakietem i nie należy go używać do innych zadań (w tym przypadku: kopiowanie plików statycznych to inne zadanie). Do takich zadań powinieneś używać narzędzia takiego jak Grunt lub Gulp. Bardzo często integruje się Webpack jako zadanie Grunt lub Gulp . Oba mają inne zadania przydatne do kopiowania plików, takich jak opisany, na przykład chrobot-contrib-copy lub gulp-copy .
W przypadku innych zasobów (nie
index.html
) możesz po prostu połączyć je z pakietem Webpack (właśnie do tego służy pakiet Webpack). Na przykładvar image = require('assets/my_image.png');
. Ale zakładam, że twojeindex.html
potrzeby nie powinny być częścią pakietu, a zatem nie jest to zadanie dla osoby pakującej.źródło
file-loader
które w zasadzie tylko kopiuje plik / obraz do katalogu wyjściowego i daje url gdy tego wymaga:var url = require('myFile');
. Jak powiedziałem, pakiet może zawierać jeden lub wiele plików.Możesz dodać indeks bezpośrednio do konfiguracji wpisu i załadować go za pomocą modułu ładującego pliki
źródło
Aby skopiować już istniejący
index.html
plik dodist
katalogu, możesz po prostu użyć HtmlWebpackPlugin , określając źródłoindex.html
jako szablon .Utworzony
dist/index.html
plik będzie w zasadzie taki sam, jak plik źródłowy, z tą różnicą, że zasoby pakietowe, takie jak pliki .js, są wstrzykiwane za pomocą<script>
znaczników przez pakiet WWW. Można skonfigurować minimalizację i dodatkowe opcje, które są udokumentowane na github .źródło
Działa to dobrze w systemie Windows:
npm install --save-dev copyfiles
package.json
Mam zadanie kopiowania:"copy": "copyfiles -u 1 ./app/index.html ./deploy"
To przenosi mój index.html z folderu aplikacji do folderu wdrażania.
źródło
Aby rozszerzyć odpowiedź @ hobbeshunter, jeśli chcesz wziąć tylko index.html, możesz także użyć CopyPlugin. Główną motywacją do korzystania z tej metody w porównaniu z innymi pakietami jest koszmar, aby dodawać wiele pakietów dla każdego typu i konfigurować je itd. najprostszym sposobem jest użycie CopyPlugin do wszystkiego:
Następnie
Jak widać, skopiuj cały folder statyczny wraz z całą zawartością do folderu dist. Nie wymaga css, pliku ani żadnych innych wtyczek.
Chociaż ta metoda nie pasuje do wszystkiego, wykona zadanie w prosty i szybki sposób.
źródło
Znalazłem też to łatwe i tyle ogólne, aby umieścić mój
index.html
plik wdist/
katalogu i dodać<script src='main.js'></script>
doindex.html
obejmować moje spakowane pliki WebPACK.main.js
wydaje się być domyślną nazwą wyjściową naszego pakietu, jeśli nie podano go w pliku conf pakietu web . Myślę, że to nie jest dobre i długoterminowe rozwiązanie, ale mam nadzieję, że pomoże zrozumieć, jak działa webpack .źródło