sd-web-ui部署记录

用秋叶大佬的镜像绘图,安装ip-adapter插件提示环境不兼容,重新升级机器上的sd-web-ui。
阅读全文

【技术】部署screenshot-to-code实践和感悟

screenshot-to-code 是近期在github上很火的GPT衍生项目,其提供web界面去调用GPT-vision接口,进行图生代码的转换。
在这基础上,还做了前端框架融合(生成的代码使用tailwindcss)、server服务集成(代码在backend文件夹中)。
在上线两个月后,star数达到了3.1万,热度很高,AI的风潮确实十分强劲。

Alt text

使用效果可以看这个视频

安装

下面来简单介绍下,在安装部署screenshot-to-code过程中可能遇到的问题。将分成两个部分来入手介绍。

基础依赖

screenshot-to-code项目中包含了前端和后端两部分,分别在frontend、backend文件夹中。需要分别将前后端项目启动,才算完整运行。
前端部分使用yarn作依赖管理,node作webui的server环境,后端部分则使用poetry作依赖管理,python作api的server环境。同时,为了避免多个环境依赖问题,项目使用docker多镜像联合运行,所以需要本地机器安装了dockerdocker-compose
最后,项目的核心能力是通过调用GPT-vision接口实现,所以还需要我们拥有openaiOPENAI_API_KEY,KEY需要我们在openai官网上开通GPT4的会员才能使用(GPT4需要付费使用,价格可以参考Pricing)。

简单对上面的概念做下介绍:

  • yarn: JavaScript生态中的一种包管理工具
  • poetry: Python生态中的一种包管理工具
  • docker: 虚拟化工具,可分割出独立的环境模块,并在其中完成复杂依赖的安装,且不会影响宿主机器和宿主上的其他程序
  • docker-compose: 将由docker虚拟化出的多个环境模块联合到一起的工具,比如将前端的模块、后端的模块联合到一起,组成网站
阅读全文

【记录】rollup下less插件和postcss插件问题排查小记.md

问题描述

项目, 在 ```rollup v2.79.1``` ,配置使用 ```rollup-plugin-less``` 和 ```rollup-pulgin-postcss``` 按照如下配置
1
2
3
4
5
6
7
``` js
const less = require("rollup-plugin-less");
const postcss = require("rollup-plugin-postcss");
const tailwindcss = require("tailwindcss");

less({ insert: false }),
postcss({ plugins: [tailwindcss] })

提示 config.less 文件 编译不识别 error: [LessError: Unrecognised input]

排查步骤

  1. 错误定位: var isFinished = parserInput.i >= input.length中的isFinished 为fasle 导致报错
  2. 为什么 parserInput.i 是0
  3. 找到 parserInput.i 给值的地方
  4. 定位到错误是发生在这段逻辑中 browser_plugin_template/node_modules/_less@4.2.0@less/lib/less/parser/parser.js
  5. 在这个文件中,出错的逻辑在
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    try {
    parserInput.start(str, context.chunkInput, function fail(msg, index) {
    throw new less_error_1.default({
    index: index,
    type: 'Parse',
    message: msg,
    filename: fileInfo.filename
    }, imports);
    });
    tree_1.default.Node.prototype.parse = this;
    root = new tree_1.default.Ruleset(null, this.parsers.primary());
    tree_1.default.Node.prototype.rootNode = root;
    root.root = true;
    root.firstRoot = true;
    root.functionRegistry = function_registry_1.default.inherit();
    }
    catch (e) {
    return callback(new less_error_1.default(e, imports, fileInfo.filename));
    }
    var endInfo = parserInput.end();
    end的地方就报错了,问题在于 root = new tree_1.default.Ruleset(null, this.parsers.primary()); 这句的调用,这个逻辑从名字上看是以树状结构去搜索解析css的样式。
    换言之,为了定位报错的原因,已经找到less-plugin里的逻辑,但仍然无法定位具体原因,还要继续深入,这么一来,问题已经无法继续追查下去
  6. 换个思路 parserInput.i 值不对,那么就监听所有可以给 parserInput.i 赋值的地方,看报错前最后一次调用是谁发起的
  7. 然后发现 parserInput.i 被赋值的地方很多,而且很难以收口debugger,这意味着,通过less插件代码,定位错误原因的努力失败
  8. 然后想到去搜索git主页的issue 看是否有类似的问题
  9. 发现有类似的问题,并且很久没有结果了
  10. 果断用新插件(postcss,支持use loader,加载解析不同类型的样式文件)
阅读全文