2016-05-04 6 views
1

Ich habe schon eine Weile mit Stencil gearbeitet und entwickle ein eigenes Theme dafür, ich habe nvm installiert und node 5.0 und npm 2. Ich habe auch Schablone gelöscht und eine Neuinstallation von allem beinhaltete Knotenmodule und Stencil-Init Aber egal was beim Starten der Schablone ich immer noch den Fehler unten bekomme, habe ich verdammt noch mal googlet und ich bin leer ausgegangen, also hoffe ich, dass mir jemand helfen kann. Danke im Voraus!Stencil Start Error - TypeError ("Parameter 'url' muss ein String sein, nicht" + typeof url)

⇒ stencil start 
url.js:110 
    throw new TypeError("Parameter 'url' must be a string, not " + typeof url) 
     ^
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) 
    at module.exports (/usr/local/lib/node_modules/@bigcommerce/stencil-cli/server/index.js:14:31) 
    at startServer (/usr/local/lib/node_modules/@bigcommerce/stencil-cli/bin/stencil-start:188:5) 
    at /usr/local/lib/node_modules/@bigcommerce/stencil-cli/bin/stencil-start:166:32 
    at /usr/local/lib/node_modules/@bigcommerce/stencil-cli/server/lib/stencil-token.js:55:24 
    at finish (/usr/local/lib/node_modules/@bigcommerce/stencil-cli/node_modules/wreck/lib/index.js:137:20) 
    at wrapped (/usr/local/lib/node_modules/@bigcommerce/stencil-cli/node_modules/hoek/lib/index.js:866:20) 
    at ClientRequest.onResponse (/usr/local/lib/node_modules/@bigcommerce/stencil-cli/node_modules/wreck/lib/index.js:158:20) 
    at ClientRequest.g (events.js:199:16) 
+0

Versuchen Sie, zu Knoten 4.4.X. Das ist die neueste unterstützte/getestete Version. Sind Sie auf Windows, Linux oder OS X? – Alyss

+0

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. –

Antwort

0

Ich habe seit dem das Problem gelöst. Die URL soll durch Schablone auf Stencil-Init gesetzt werden und dann auf Stencil-Start mit ihnen übereinstimmen. Es stellt sich heraus, dass der Account des Kunden inaktiv geworden ist, was bedeutet, dass es nicht mehr existiert. Kurz gesagt, die URL kam undefiniert, weil keine URL mehr definiert werden musste, weil der Client nicht mehr eingerichtet war.

1

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):

  1. storeUrl - ------------ // die uRL auf eine sichere Seite (aufgefordert, als Login-Seite)
  2. 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!

+0

Das ist eine fantastische Antwort !! Ich liebe die Art und Weise, wie Sie es debuggten und ich denke, es ist eine sehr nützliche Information im Allgemeinen. –

+0

Danke! Ich bin froh zu hören, dass es Sinn gemacht hat, haha! Zu wissen, wie man zu einer Lösung kommt, ist viel mehr Ermächtigung, als nur die Lösung selbst zu kennen, und deshalb hoffe ich, dass Sie jetzt ein stärkerer Entwickler sind; Vergiss nicht, anderen zu geben ;-) –

Verwandte Themen