当前位置: 首页 > 知识库问答 >
问题:

模具开始错误-TypeError(“参数'url'必须是字符串,而不是”+typeof url“)

经博延
2023-03-14

我已经使用stencil一段时间了,正在为它开发一个自定义的主题,我已经安装了nvm和Node5.0和NPM2。我也删除了stencil,并重新安装了所有的内容,包括节点模块和stencil init,但不管什么情况,当运行stencil start时,我仍然会出现下面的错误,我已经在谷歌上搜索了这个问题,但却是空的,所以我希望有人能帮我解决这个问题。提前道谢!

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

共有1个答案

公羊涛
2023-03-14

我从未使用过模具,但由于模具配置文件(./.Stencil)中未设置URL而引发此错误。这是应该在stencil init期间设置的内容吗?具体地说,您需要确保在.stencil文件(我假定它是一个JSON配置文件,位于项目根目录中)中设置了这两个值:

  1. storeURL----------//安全页面的url(提示为登录页面)
  2. normalstoreurl--//主页的主机url

了解如何调试节点错误可能很有用。以下是我在阅读和调试中的思维过程:

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应包含在用于初始化此模块的options对象中(module.exports=function(options,callback){})

需要继续挖掘,以了解该options对象是从哪里定义的,以及它是如何包含其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是通过以下方式声明的:dotStencilFilePath,{encode:'UTF-8'});
因此dotStencilFilePath的值是通过从位于dotStencilFilePath的磁盘读取文件来设置的。

那么最后一个问题,它的路径是什么?...DotStencilFilePath的值是什么?

对我们来说很容易,它的值是在同一个文件中定义的:
var dotStencilFilePath=path.join(themePath,'.stencil');
WherethemePath=var themePath=process.cwd();(此文件的当前工作目录,当然是项目根)。

5:(解)
好了,我们搞定了!应该包含URL的文件名为.stencil(隐藏文件),位于项目根(/users/rob/MyStencilProject/.stencil)中。

这个.stencil文件应该是一个JSON文件,它包含两个URL属性的值:StoreURLNormalStoreURL

我应该检查这个文件,以确保那些属性已经设置。我应该在stencil init期间设置它们吗?我可以手动设置它们吗?无论哪种方式,我都确信主要错误是由于该文件不包含上述两个URL的值而导致的。

好的,我希望这些信息有助于解决您当前的问题,以及您在开发过程中可能遇到的任何其他问题。祝你好运!

 类似资料:
  • 我正在使用pygame创建一个游戏,但遇到了一个错误,我是pygame的新手。我正在使用python 3.8和pycharm社区版2020.1 这是我制作游戏的视频:https://www.youtube.com/watch?v=FfWpgLFMI7w这里是错误: 这是我的密码:

  • 我知道很多人问过相关的问题,但请帮我解决。我试图复制一个我在网上找到的开源温度控制实验室。我想在树莓皮上运行它。这就是我一直遇到的错误: 生成它的代码如下所示: 我相信这段代码试图通过以下代码与另一个python文件通信: 我还不知道我周围的python代码,所以一个非常清晰的“虚拟类”解决方案的解释会很有帮助。谢谢伙计们。

  • 我使用的是Python3.3,但在尝试pickle一个简单的字典时出现了一个隐秘的错误。 代码如下: 我得到:

  • 我正在做一个游戏,这里似乎有一些问题。这是我第一次使用sprite床单,如果我的错误很简单,我很抱歉。 对于大量的代码,我提前表示歉意,但不幸的是,我相信问题可能存在于代码中的任何地方。我收到的错误是“TypeError:参数1必须是pygame.Surface,而不是method”。这是指all_sprites.draw(screen)命令。我知道屏幕的格式是正确的,所以不是这样。我的老师说很可

  • 我想对一个浮点数进行四舍五入,得到点后的两位数。但我收到了一个错误: float()参数必须是字符串或数字,而不是“NoneType” 在评级模型的评级字段中四舍五入是一个坏主意,因为平均_评级不会四舍五入