2016-07-13 22 views
5

próbuję zastąpić zmienną w index.html, który wygląda tak:używać HTML-WebPack-plugin sznurkiem-replace-ładowarki w WebPacka

<meta name='author' content=$variable>

w pliku konfiguracyjnym używać:

{ 
    test: /index\.html$/, 
    loader: 'string-replace', 
    query: { 
     search: '$variable', 
     replace: 'stuff to inject', 
    }, 
    } 

loaders w tablicy, a następnie w plugins:

new HtmlWebpackPlugin({ 
    template: conf.path.src('src/index.html'), 
    inject: true, 
}) 
Wyniki

Ale to ustawienie w:

ERROR in ./~/html-webpack-plugin/lib/loader.js!./src/index.html Module parse failed (...) Unexpected token (1:0) You may need an appropriate loader to handle this file type.

Czy macie jakieś pomysły co to może być spowodowane i jak można debugować to?

+0

Do debugowania używam [węzła żelaznego] (https://github.com/sa/iron-node), który pozwala dodawać instrukcje debuggera do modułów węzłów – jantimon

Odpowiedz

5

Jest to spowodowane tym, że string-replace-plugin oczekuje modułu eksportującego ciąg znaków. Powinieneś przekonwertować plik HTML na moduł CommonJS.

Na przykład, jest to sposób, za pomocą raw-loader:

najpierw dodać cytaty do atrybutu content w html

<meta name='author' content='$variable'>` 

i

{ 
    test: /index\.html$/, 
    loader: 'string-replace?search=$variable&replace=stuff to inject!raw' 
    } 
+0

Niezły - czy myślisz, że moglibyśmy ulepszyć html- webpack-plugin jakoś poprawić komunikat o błędzie? – jantimon

+0

Dzięki! Pracowałem również nad tym przy użyciu programu ładującego HTML – wap300

1

odpowiedź Konstantego działa dobrze i jest dobrze, jeśli chcesz zastąpić jedną wartość. Chciałem zastąpić tak wielu wartości dodanej następujące do mojego loaders tablicy

{ 
    test: /\.html$/, 
    loader: 'raw' 
    }, 
    { 
    test: /\.html$/, 
    loader: 'string-replace', 
    query: { 
     multiple: [ 
     {search: '$variable1', replace: 'replacement 1'}, 
     {search: '$variable2', replace: 'replacement 2'} 
     ] 
    } 
    } 

Kluczową zmianą jest najpierw uruchomić plik HTML, dzięki ładowarce raw, a następnie można wykorzystać wszystkie normalne config dla string-replace-loader.

+1

Ten działał w pakiecie internetowym 1.X, ale myślę, że nie działa z pakietem webpack 2 i 3. – SharpCoder