2016-05-23 8 views
1

Kann mir jemand vielleicht erklären, wie dieser Build-Zeit require funktioniert?erfordern ('template.jade') in reagieren-Starter-Kit

https://github.com/kriasoft/react-starter-kit/blob/feature/redux/src/server.js#L89

Sie fordern eine jade Vorlage, die Verpackung oder die Konfiguration dies erlaubt, scheine ich nicht in der Lage, es selbst zu finden.

const template = require('./views/index.jade') 

ich denke, ist viel eleganter dann:

import jade from 'jade' 
const template = jade.compile('./views/index.jade') 
+0

Mögliche Duplikat [Was Javascript ist "require"?] (http://stackoverflow.com/questions/9901082/what-is-this-javascript-require) – KWeiss

+0

„' require() 'ist Nicht Teil Ihres Standard-JavaScript. In Zusammenhang auf Ihre Frage und Tags, 'require()' in Node.js gebaut * * Module zu laden.“Http://stackoverflow.com/a/9901097/5742681 – KWeiss

+2

Zusätzlich zu den oben aufgeführten Links, das Projekt ist Verwendung von [Webpack] (https://github.com/kriasoft/react-starter-kit/blob/feature/redux/tools/webpack.config.js), was bedeutet, dass diese Umwandlung bei * build Zeit * passiert, anstatt zu * Laufzeit * wie 'jade.compile' – CodingIntrigue

Antwort

2

Als RGraham mentioned in his comment, die require Anruf „abgefangen“ ist während webpack wird Kompilierung des Anwendungspaket. Dies geschieht mit Hilfe "loaders" durchgeführt, die für die Einfuhr eines bestimmten Typs bestimmtes Verhalten zu definieren:

Lader können Sie Vorprozess Dateien, wie Sie benötigen() oder „Last“ sie.

In diesem speziellen Fall, der Lader, die diese Modifikation tut könnte einer von ihnen sein (oder eine andere, die ich nicht in meiner Suche gefunden):

Edit: am project's own webpack configuration suchen wir es sehen kann, ist die zweite Verbindung über:

{ 
    test: /\.jade$/, 
    loader: 'jade-loader', 
} 
0

jade-loader liest den Inhalt der angegebenen Datei, die in etwa so aussehen (Jade string) machen:

h1 Hello, #{author}! 

..und ersetzt, dass mit einem Commonjs JavaScript-Code ähnlich wie diese (bei der Kompilierung):

module.exports = function(data) { 
    return `<h1>Hello, ${data.name}</h1>`; 
};