2016-08-01 13 views
8

Więc chcę zrobić bardzo proste zadanie przy użyciu pakietu internetowego.Co dokładnie mam zrobić z "module.exports = 'html_template_content'" na opakowaniu sieciowym

Mam kilka statycznych szablonów HTML, takich jak np.

test.html

<div><span>template content</span></div> 

i wszystko, co chcesz zrobić, to wrócić ciąg wewnątrz szablonu np

require("raw!./test.html") 

ze powinien zwrócić ciąg jak:

"<div><span>template content</span></div>" 

ale zamiast tego zwraca następujący ciąg

"modules.exports = <div><span>template content</span></div>" 

Próbowałem kilku modułów, takich jak raw-loader i html-loader. i oba zachowują się w taki sam sposób. Więc przyjrzałem się kodowi źródłowemu, tylko po to, aby przekonać się, że jest on SUPPOSED, aby zachowywać się w ten sposób.

raw module source code

więc co dokładnie mam oczekiwać z tym zrobić, jeśli chcę tylko surowe HTML? czy jest to zła praktyka po prostu usunąć poprzedni "module.exports =" ciąg? z wiązką EDIT: usunięcie „modules.export =” wyników udział w wiązce powrocie nic:/

mój config

module.exports = 
{ 
    module: 
    { 
     loaders: 
      [ 
       { test: /\.html$/, loader: "raw-loader" } 
      ] 
    } 
}; 
+0

Czy możesz pokazać swoją konfigurację WebPacka? Zwracanie 'module.exports' prawdopodobnie jest wewnętrznym pakietem internetowym - powinieneś dostawać surowy łańcuch z powrotem – CodingIntrigue

+0

Opublikowałem konfigurację powyżej – user3531149

Odpowiedz

-3

znalazłem brudne obejścia przy użyciu eval

console.log(eval(require("raw!./test.html"))); 

To rzeczywiście zwraca szablon HTML, ale zostawię to rozwiązanie do dyskusji, dopóki nie znalazłem lepszego.

+0

nie potrzebujesz eval, najpierw dostajesz ciąg znaków. Założę się, że zrobiłeś * nie * 'npm install raw-loader'. Dokumentacja to 2 linie;) https://github.com/webpack/raw-loader –

-2

Kiedy piszesz require('./test.html') to znaczy, że po prostu uruchomić kod zwrócone przez sieć ładowarek. Wynik jest eksportowany w tym kodzie jako module.exports. Aby wykorzystać ten wynik trzeba przypisać wymagają oświadczenie zmiennej:

var htmlString = require('raw!./test.html'); 
//htmlString === "<div><span>template content</span></div>" 

Pamiętaj, że każda ładowarka w Webpack zwraca kod JS - nie HTML, a nie CSS. Możesz użyć tego kodu, aby uzyskać HTML, CSS i cokolwiek innego.

+0

oops to był literówka w OP, używam już require ('raw! ./ test.html ") i zwraca ten sam ciąg – user3531149

+1

To nie działa. –

5

Rozwiązaniem jest wymagać plik bez określenia jakichkolwiek dodatkowych ładującego, jak to już podano w config WebPACK

const test = require('./test.html') 

wyjaśnienie: z aktualnym kodem ubiegasz ładowarka raw dwukrotnie do pliku . Po określeniu łańcucha ładowania w swojej konfiguracji:

loaders: 
    [ 
     { test: /\.html$/, loader: "raw-loader" } 
    ] 

...jesteś już mówienie WebPACK dodać tę ładowarkę do sieci ładowarki za każdym razem wymagają plik pasujący stan test (tutaj każdy plik HTML)

Dlatego, kiedy piszę ten

const test = require('raw!./test.html') 

... w rzeczywistości jest on równoważny z tą wartością:

const test = require('raw!raw!./test.html') 
Powiązane problemy