Ich habe noch nie Stencil verwendet, aber dieser Fehler ausgelöst wird, weil die URL nicht in Ihrer Schablone Konfigurationsdatei (./.stencil
) gesetzt. Soll das etwas sein, das während stencil init
gesetzt werden soll? Insbesondere
, müssen Sie diese beiden Werte stellen Sie sicher, haben in der .stencil
Datei gesetzt worden ist (was ich davon ausgehen, eine JSON-Konfigurationsdatei sein, in Ihrem Projekt Stammverzeichnis):
- storeUrl - ------------ // die uRL auf eine sichere Seite (aufgefordert, als Login-Seite)
- normalStoreUrl --- // die Host uRL der Homepage
Es könnte nützlich sein, zu wissen, wie Knotenfehler zu debuggen sind. Hier ist, wie mein Denkprozess beim Lesen & Debuggen ging:
1.
TypeError: Parameter 'url' must be a string, not undefined
at Url.parse (url.js:110:11)
at Object.urlParse [as parse] (url.js:104:5)
So ist der Fehler ziemlich geradlinig ist. Das Programm versucht, eine URL aus einer Zeichenfolge zu analysieren, diese Zeichenfolge ist jedoch nicht definiert, wodurch der Hauptfehler verursacht wird. Insbesondere versucht das Knotenmodul url.js
das Parsen durchzuführen.
Wo soll die URL definiert werden? Gehen wir weiter, um zu sehen, ob wir es herausfinden können.
2:
at module.exports (/usr/local/lib/node_modules/@bigcommerce/stencil-cli/server/index.js:14:31)
https://github.com/bigcommerce/stencil-cli/blob/master/server/index.js
Okay, also lasst uns diese Datei öffnen und Blick auf Linie 14, der wie folgt lautet:
module.exports = function(options, callback) {
var config = manifest.get('/'),
parsedSecureUrl = Url.parse(options.dotStencilFile.storeUrl), //Line 14 - The url to a secure page (prompted as login page)
parsedNormalUrl = Url.parse(options.dotStencilFile.normalStoreUrl); //The host url of the homepage;
...
Okay, so haben wir die genaue Lage Zeile, in der der Fehler ausgelöst wird (parsedSecureUrl
). Diese URL sollte aufgenommen wurde in den Optionen verwendeten Objekt dieses Modul (module.exports = function(options, callback) {}
) zu initialisieren
Brauchen graben, um zu verhindern, um zu sehen, wo diese Option Objekt definiert wird, und wie es mit seiner dotStencilFile
Eigenschaft (options.dotStencilFile
).
3:
at startServer (/usr/local/lib/node_modules/@bigcommerce/stencil-cli/bin/stencil-start:188:5)
https://github.com/bigcommerce/stencil-cli/blob/master/bin/stencil-start dem es heißt:
/**
* Starts up the local Stencil Server as well as starts up BrowserSync and sets some watch options.
*/
function startServer() {
var params = {
dotStencilFile: dotStencilFile, //It's getting set here!!
variationIndex: themeConfig.variationIndex || 0,
stencilEditorEnabled: Program.themeEditor,
stencilEditorPort: Program.themeEditorPort || 8181,
useCache: Program.cache
};
//Line 188 below:
Server(params, function (err) {
var watchFiles = [
'/assets',
'/templates',
'/lang'
];
...
Deshalb haben wir die Funktion verantwortlich für die Initialisierung und Leiten des options
Parameter an das Modul in Schritt 2. Im Einzelnen Die Variable heißt params
und das Objekt, das die URL enthalten soll, ist params.dotStencilFile
.
An diesem Punkt müssen wir nur herausfinden, was dotStencilFile
sein soll.
4:
durch den Quellcode der Suche in dieser Datei, kann ich sehen, dotStencilFile
werden via erklärt: dotStencilFile = Fs.readFileSync(dotStencilFilePath, {encoding: 'utf-8'});
So dotStencilFile
‚s-Wert durch das Lesen einer Datei von der Festplatte gesetzt ist, befindet sich auf dotStencilFilePath
.
Letzte Frage dann, was ist ihr Weg? ... Was ist der Wert von dotStencilFilePath
?
leicht genug für uns, wird sein Wert in der gleichen Datei definiert:
var dotStencilFilePath = Path.join(themePath, '.stencil');
Wo themePath
= var themePath = process.cwd();
(Das aktuelle Arbeitsverzeichnis dieser Datei assumingly das Projekt root).
5: (Lösung)
Okay, wir haben es! Die Datei, die die URLs enthalten soll, heißt .stencil
(eine versteckte Datei), die sich im Projektstamm befindet (/Users/rob/myStencilProject/.stencil
).
Diese .stencil
Datei soll eine JSON-Datei sein, die die Werte für die beiden URL-Eigenschaften enthält: storeUrl
& normalStoreUrl
.
Ich sollte diese Datei überprüfen, um sicherzustellen, dass diese Eigenschaften festgelegt wurden. Sollte ich sie vielleicht während stencil init
setzen? Kann ich sie manuell einstellen? In beiden Fällen bin ich sicher, dass der Hauptfehler verursacht wird, da diese Datei keine Werte für die beiden obigen URLs enthält.
Welp, ich hoffe, diese Informationen helfen sowohl Ihr aktuelles Problem bei der Lösung, sowie alle anderen, die Sie während der Entwicklung begegnen könnten. Viel Glück!
Versuchen Sie, zu Knoten 4.4.X. Das ist die neueste unterstützte/getestete Version. Sind Sie auf Windows, Linux oder OS X? – Alyss
Ah, entsprechend Ihren Dateipfaden sind dies alle Bereiche, die root gehören.Dies kann nur ein Berechtigungsproblem der Anwendung sein, die die Konfigurationsdatei '.stencil 'nicht lesen kann. Versuchen Sie es als 'sudo stencil init' und dann' sudo stencil start' auszuführen. –