模板启动错误 - TypeError("Parameter 'url' must be a string, not " + typeof url)
Stencil Start Error - TypeError("Parameter 'url' must be a string, not " + typeof url)
我已经使用 stencil 一段时间了,正在为其开发自定义主题,我已经安装了 nvm 和 node 5.0 以及 npm 2。我还删除了 stencil 并重新安装了所有内容include node modules and stencil init 但无论什么时候 运行 stencil 开始我仍然会收到下面的错误,我已经用谷歌搜索了这个并且结果是空的所以我希望有人能帮助我。提前致谢!
⇒ 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)
我从未使用过 Stencil,但出现此错误是因为 URL 未在您的模板配置文件 (./.stencil
) 中设置。这是应该在 stencil init
期间设置的内容吗?
具体来说,你需要确保这两个值已经在 .stencil
文件中设置(我假设它是一个 JSON 配置文件,位于你的项目根目录中):
- storeUrl----------------//把url转到安全页面(提示为登录页面)
- normalStoreUrl ---//主页的宿主url
了解如何调试 Node 错误可能会有用。以下是我在阅读和调试时的思维过程:
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)
所以错误很简单。该程序试图从字符串中解析 URL,但该字符串未定义,因此导致主要错误。具体来说,节点模块 url.js
正在尝试进行解析。
URL 应该在哪里定义?让我们继续看看我们是否能弄清楚。
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
好的,让我们打开这个文件并查看第 14 行,它显示为:
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;
...
好的,我们已经找到了引发错误的确切行 (parsedSecureUrl
)。此 URL 应该包含在用于初始化此模块的选项对象中 (module.exports = function(options, callback) {}
)
需要继续挖掘以查看从哪里定义了这个选项对象,以及它是如何包含它的 dotStencilFile
属性 (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
上面写着:
/**
* 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'
];
...
因此我们在第 2 步中找到了负责初始化并将 options
参数传递给模块的函数。具体来说,该变量称为 params
并且该对象应该包含URL 是 params.dotStencilFile
。
在这一点上,我们只需要弄清楚 dotStencilFile
应该是什么。
4:
通过搜索此文件中的源代码,我可以看到 dotStencilFile
是通过以下方式声明的:
dotStencilFile = Fs.readFileSync(dotStencilFilePath, {encoding: 'utf-8'});
所以 dotStencilFile
的值是通过从位于 dotStencilFilePath
.
的磁盘读取文件来设置的
那么最后一个问题,它的路径是什么? ...dotStencilFilePath
的价值是多少?
对我们来说很容易,它的值在同一个文件中定义:
var dotStencilFilePath = Path.join(themePath, '.stencil');
其中 themePath
= var themePath = process.cwd();
(此文件的当前工作目录,假定为项目根目录)。
5:(解)
好的,我们明白了!应该包含 URL 的文件称为 .stencil
(隐藏文件),位于项目根目录 (/Users/rob/myStencilProject/.stencil
) 中。
这个 .stencil
文件应该是一个 JSON 文件,其中包含两个 URL 属性的值:storeUrl
和 normalStoreUrl
。
我应该检查此文件以确保已设置这些属性。我应该在 stencil init
期间设置它们吗?我可以手动设置它们吗?无论哪种方式,我都确定主要错误是由于该文件不包含上述两个 URLs.
的值而引起的
好吧,我希望这些信息有助于解决您当前的问题,以及您在开发过程中可能遇到的任何其他问题。祝你好运!
我已经解决了这个问题。 url 应该由 Stencil 在 Stencil init 上设置,然后在 Stencil 启动时匹配它们。事实证明,我并不知道客户的账户已经不活跃了,这意味着它不复存在了。简而言之,url 出现未定义,因为不再有 url 被定义,因为客户端不再有一个设置。
我已经使用 stencil 一段时间了,正在为其开发自定义主题,我已经安装了 nvm 和 node 5.0 以及 npm 2。我还删除了 stencil 并重新安装了所有内容include node modules and stencil init 但无论什么时候 运行 stencil 开始我仍然会收到下面的错误,我已经用谷歌搜索了这个并且结果是空的所以我希望有人能帮助我。提前致谢!
⇒ 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)
我从未使用过 Stencil,但出现此错误是因为 URL 未在您的模板配置文件 (./.stencil
) 中设置。这是应该在 stencil init
期间设置的内容吗?
具体来说,你需要确保这两个值已经在 .stencil
文件中设置(我假设它是一个 JSON 配置文件,位于你的项目根目录中):
- storeUrl----------------//把url转到安全页面(提示为登录页面)
- normalStoreUrl ---//主页的宿主url
了解如何调试 Node 错误可能会有用。以下是我在阅读和调试时的思维过程:
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)
所以错误很简单。该程序试图从字符串中解析 URL,但该字符串未定义,因此导致主要错误。具体来说,节点模块 url.js
正在尝试进行解析。
URL 应该在哪里定义?让我们继续看看我们是否能弄清楚。
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
好的,让我们打开这个文件并查看第 14 行,它显示为:
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;
...
好的,我们已经找到了引发错误的确切行 (parsedSecureUrl
)。此 URL 应该包含在用于初始化此模块的选项对象中 (module.exports = function(options, callback) {}
)
需要继续挖掘以查看从哪里定义了这个选项对象,以及它是如何包含它的 dotStencilFile
属性 (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 上面写着:
/**
* 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'
];
...
因此我们在第 2 步中找到了负责初始化并将 options
参数传递给模块的函数。具体来说,该变量称为 params
并且该对象应该包含URL 是 params.dotStencilFile
。
在这一点上,我们只需要弄清楚 dotStencilFile
应该是什么。
4:
通过搜索此文件中的源代码,我可以看到 dotStencilFile
是通过以下方式声明的:
dotStencilFile = Fs.readFileSync(dotStencilFilePath, {encoding: 'utf-8'});
所以 dotStencilFile
的值是通过从位于 dotStencilFilePath
.
那么最后一个问题,它的路径是什么? ...dotStencilFilePath
的价值是多少?
对我们来说很容易,它的值在同一个文件中定义:
var dotStencilFilePath = Path.join(themePath, '.stencil');
其中 themePath
= var themePath = process.cwd();
(此文件的当前工作目录,假定为项目根目录)。
5:(解)
好的,我们明白了!应该包含 URL 的文件称为 .stencil
(隐藏文件),位于项目根目录 (/Users/rob/myStencilProject/.stencil
) 中。
这个 .stencil
文件应该是一个 JSON 文件,其中包含两个 URL 属性的值:storeUrl
和 normalStoreUrl
。
我应该检查此文件以确保已设置这些属性。我应该在 stencil init
期间设置它们吗?我可以手动设置它们吗?无论哪种方式,我都确定主要错误是由于该文件不包含上述两个 URLs.
好吧,我希望这些信息有助于解决您当前的问题,以及您在开发过程中可能遇到的任何其他问题。祝你好运!
我已经解决了这个问题。 url 应该由 Stencil 在 Stencil init 上设置,然后在 Stencil 启动时匹配它们。事实证明,我并不知道客户的账户已经不活跃了,这意味着它不复存在了。简而言之,url 出现未定义,因为不再有 url 被定义,因为客户端不再有一个设置。