picgo-plugin-compress
picgo-plugin-compress copied to clipboard
tinypng报错
晚上才装上,报错如下(有没有key都是这样)
2023-01-13 21:11:38 [PicGo INFO] Before transform
2023-01-13 21:11:38 [PicGo INFO] Transforming... Current transformer is [compress]
2023-01-13 21:11:38 [PicGo INFO] 压缩:tinypng
2023-01-13 21:11:38 [PicGo INFO] 图片地址:https://img01.anzhiy.cn/useruploads/8/2022/12/15/639adf5b8806a.png
2023-01-13 21:11:38 [PicGo INFO] 图片信息:{"fileName":"639adf5b8806a.png","extname":".png"}
2023-01-13 21:11:38 [PicGo INFO] 获取网络图片
2023-01-13 21:11:38 [PicGo WARN] failed
2023-01-13 21:11:38 [PicGo ERROR]
------Error Stack Begin------
TypeError: ctx.Request.request(...).on is not a function
at C:\Users\Administrator\AppData\Roaming\picgo\node_modules\picgo-plugin-compress\dist\utils.js:70:111
at step (C:\Users\Administrator\AppData\Roaming\picgo\node_modules\picgo-plugin-compress\dist\utils.js:52:23)
at Object.next (C:\Users\Administrator\AppData\Roaming\picgo\node_modules\picgo-plugin-compress\dist\utils.js:33:53)
at C:\Users\Administrator\AppData\Roaming\picgo\node_modules\picgo-plugin-compress\dist\utils.js:27:71
at new Promise (<anonymous>)
at __awaiter (C:\Users\Administrator\AppData\Roaming\picgo\node_modules\picgo-plugin-compress\dist\utils.js:23:12)
at fetchImage (C:\Users\Administrator\AppData\Roaming\picgo\node_modules\picgo-plugin-compress\dist\utils.js:67:12)
at Object.getImageBuffer (C:\Users\Administrator\AppData\Roaming\picgo\node_modules\picgo-plugin-compress\dist\utils.js:85:16)
at Object.TinypngCompress (C:\Users\Administrator\AppData\Roaming\picgo\node_modules\picgo-plugin-compress\dist\compress\tinypngweb.js:18:20)
at C:\Users\Administrator\AppData\Roaming\picgo\node_modules\picgo-plugin-compress\dist\index.js:23:115
-------Error Stack End-------
2023-01-13 21:11:38 [PicGo ERROR]
------Error Stack Begin------
TypeError: ctx.Request.request(...).on is not a function
at C:\Users\Administrator\AppData\Roaming\picgo\node_modules\picgo-plugin-compress\dist\utils.js:70:111
at step (C:\Users\Administrator\AppData\Roaming\picgo\node_modules\picgo-plugin-compress\dist\utils.js:52:23)
at Object.next (C:\Users\Administrator\AppData\Roaming\picgo\node_modules\picgo-plugin-compress\dist\utils.js:33:53)
at C:\Users\Administrator\AppData\Roaming\picgo\node_modules\picgo-plugin-compress\dist\utils.js:27:71
at new Promise (<anonymous>)
at __awaiter (C:\Users\Administrator\AppData\Roaming\picgo\node_modules\picgo-plugin-compress\dist\utils.js:23:12)
at fetchImage (C:\Users\Administrator\AppData\Roaming\picgo\node_modules\picgo-plugin-compress\dist\utils.js:67:12)
at Object.getImageBuffer (C:\Users\Administrator\AppData\Roaming\picgo\node_modules\picgo-plugin-compress\dist\utils.js:85:16)
at Object.TinypngCompress (C:\Users\Administrator\AppData\Roaming\picgo\node_modules\picgo-plugin-compress\dist\compress\tinypngweb.js:18:20)
at C:\Users\Administrator\AppData\Roaming\picgo\node_modules\picgo-plugin-compress\dist\index.js:23:115
-------Error Stack End-------
或许我是漏掉了什么,求解🤩
更新:PicGo底层上传库从 request 迁移至 axios ,理论上对旧有插件是兼容的,如果插件遇到不兼容的情况请开发者参考 PicGo-Core 的 https://github.com/PicGo/PicGo-Core/issues/65 进行适配
可以根据楼上的视频,下载老版本的 picgo2.3.0 即可。插件停更好像。
源码修改:fork github 上 picgo-plugin-compress 代码,clone 到本地后,修改两处即可。
-
src\util.ts,13行修改为:
const response = await ctx.request({ method: 'GET', url, encoding: null, resolveWithFullResponse: true, responseType: 'arraybuffer' })
-
src\compress\tinypng\tinypng.ts,86-93 行修改为:
if (options.buffer) { this.PicGo.log.info('TinyPng 上传本地图片') Object.assign(fetchOptions, { data: options.buffer }) } const req = this.PicGo.request(fetchOptions)
-
package.json ,修改,更新 picgo-core 的版本,"picgo": "1.5.0"
-
执行 rpm run build,重新编译生成dist 文件夹中内容,关闭 PicGo,将生成的 dist 文件复制到 PicGo用户数据目录中的 node_modules\picgo-plugin-compress 覆盖即可。
源码修改:fork github 上 picgo-plugin-compress 代码,clone 到本地后,修改两处即可。
- src\util.ts,13行修改为:
const response = await ctx.request({ method: 'GET', url, encoding: null, resolveWithFullResponse: true, responseType: 'arraybuffer' })
- src\compress\tinypng\tinypng.ts,86-93 行修改为:
if (options.buffer) { this.PicGo.log.info('TinyPng 上传本地图片') Object.assign(fetchOptions, { data: options.buffer }) } const req = this.PicGo.request(fetchOptions)
- 执行 rpm run build,重新编译生成dist 文件夹中内容,关闭 PicGo,将生成的 dist 文件复制到 PicGo用户数据目录中的 node_modules\picgo-plugin-compress 覆盖即可。
按照这个方法执行后报如下错误:
❯ npm run build
> [email protected] build
> tsc -p .
src/compress/tinypng/tinypng.ts:92:28 - error TS2551: Property 'request' does not exist on type 'PicGo'. Did you mean 'Request'?
92 const req = this.PicGo.request(fetchOptions)
~~~~~~~
node_modules/[email protected]@picgo/dist/src/core/PicGo.d.ts:22:5
22 Request: Request;
~~~~~~~
'Request' is declared here.
src/utils.ts:12:60 - error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value.
12 export async function fetchImage(ctx: PicGo, url: string): Promise<Buffer> {
~~~~~~~~~~~~~~~
src/utils.ts:13:30 - error TS2349: This expression is not callable.
Type 'Request' has no call signatures.
13 const response = await ctx.Request({ method: 'GET', url, encoding: null, resolveWithFullResponse: true, responseType: 'arraybuffer' })
~~~~~~~
Found 3 errors in 2 files.
Errors Files
1 src/compress/tinypng/tinypng.ts:92
2 src/utils.ts:12
src\util.ts
文件修改后12-18行是这样吗:
export async function fetchImage(ctx: PicGo, url: string): Promise<Buffer> {
const response = await ctx.Request({ method: 'GET', url, encoding: null, resolveWithFullResponse: true, responseType: 'arraybuffer' })
const contentType = response.headers['content-type']
if (contentType && !contentType.includes('image')) {
throw new Error(`${url} 不是图片`)
}
}
@boringhex-top 不好意思,忘记贴了,还有一个package.json 需要修改,更新 picgo-core的版本到1.5.0
"picgo": "1.5.0",
@Atomin-Lee 感谢,我修改picgo→1.5.0后,报如下错误:
❯ npm run build
> [email protected] build
> tsc -p .
src/compress/image2webp.ts:7:41 - error TS2709: Cannot use namespace 'PicGo' as a type.
7 export function Image2WebPCompress(ctx: PicGo, { imageUrl }: CommonParams): Promise<ImageInfo> {
~~~~~
src/compress/imagemin.ts:8:39 - error TS2709: Cannot use namespace 'PicGo' as a type.
8 export function ImageminCompress(ctx: PicGo, { imageUrl }: CommonParams): Promise<ImageInfo> {
~~~~~
src/compress/skip.ts:5:35 - error TS2709: Cannot use namespace 'PicGo' as a type.
5 export function SkipCompress(ctx: PicGo, { imageUrl }: CommonParams): Promise<ImageInfo> {
~~~~~
src/compress/tinypng/index.ts:10:41 - error TS2709: Cannot use namespace 'PicGo' as a type.
10 export function TinypngKeyCompress(ctx: PicGo, { imageUrl, key }: CommonParams & ITinypngOptions): Promise<ImageInfo> {
~~~~~
src/compress/tinypng/tinypng.ts:12:8 - error TS2709: Cannot use namespace 'PicGo' as a type.
12 ctx: PicGo
~~~~~
src/compress/tinypng/tinypng.ts:25:19 - error TS2709: Cannot use namespace 'PicGo' as a type.
25 private PicGo!: PicGo
~~~~~
src/compress/tinypngweb.ts:18:38 - error TS2709: Cannot use namespace 'PicGo' as a type.
18 export function TinypngCompress(ctx: PicGo, { imageUrl }: CommonParams): Promise<ImageInfo> {
~~~~~
src/compress/tinypngweb.ts:32:14 - error TS7006: Parameter 'buffer' implicitly has an 'any' type.
32 .then((buffer) => {
~~~~~~
src/index.ts:2:30 - error TS2307: Cannot find module 'picgo/dist/src/utils/interfaces' or its corresponding type declarations.
2 import { PluginConfig } from 'picgo/dist/src/utils/interfaces'
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/index.ts:14:22 - error TS2709: Cannot use namespace 'PicGo' as a type.
14 function handle(ctx: PicGo) {
~~~~~
src/index.ts:21:32 - error TS7006: Parameter 'imageUrl' implicitly has an 'any' type.
21 const tasks = ctx.input.map((imageUrl) => {
~~~~~~~~
src/index.ts:43:44 - error TS7006: Parameter 'item' implicitly has an 'any' type.
43 '图片信息:' + JSON.stringify(output.map((item) => ({ fileName: item.fileName, extname: item.extname, height: item.height, width: item.width })))
~~~~
src/index.ts:50:33 - error TS2709: Cannot use namespace 'PicGo' as a type.
50 module.exports = function (ctx: PicGo): any {
~~~~~
src/index.ts:56:17 - error TS2709: Cannot use namespace 'PicGo' as a type.
56 config(ctx: PicGo): PluginConfig[] {
~~~~~
src/utils.ts:12:39 - error TS2709: Cannot use namespace 'PicGo' as a type.
12 export async function fetchImage(ctx: PicGo, url: string): Promise<Buffer> {
~~~~~
src/utils.ts:12:60 - error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value.
12 export async function fetchImage(ctx: PicGo, url: string): Promise<Buffer> {
~~~~~~~~~~~~~~~
src/utils.ts:20:37 - error TS2709: Cannot use namespace 'PicGo' as a type.
20 export function getImageBuffer(ctx: PicGo, imageUrl: string): Promise<Buffer> {
~~~~~
Found 17 errors in 8 files.
Errors Files
1 src/compress/image2webp.ts:7
1 src/compress/imagemin.ts:8
1 src/compress/skip.ts:5
1 src/compress/tinypng/index.ts:10
2 src/compress/tinypng/tinypng.ts:12
2 src/compress/tinypngweb.ts:18
6 src/index.ts:2
3 src/utils.ts:12
修改这几个文件导入picgo的语句:
import { PicGo } from 'picgo'
修改index.ts
文件:
第2行
import { IPluginConfig } from 'picgo/dist/utils/interfaces'
56-60行
config(ctx: PicGo): IPluginConfig[] {
let config: IConfig = ctx.getConfig('transformer.compress') || ctx.getConfig('picgo-plugin-compress')
// if (!config) {
// config = {}
// }
还是有几个错误:
❯ npm run build
> [email protected] build
> tsc -p .
src/compress/tinypng/tinypng.ts:94:21 - error TS2345: Argument of type '(response: Response) => Promise<Buffer>' is not assignable to parameter of type '(value: unknown) => Buffer | PromiseLike<Buffer>'.
Types of parameters 'response' and 'value' are incompatible.
Type 'unknown' is not assignable to type 'Response'.
94 return req.then((response: Response) => {
~~~~~~~~~~~~~~~~~~~~~~~~~
src/compress/tinypngweb.ts:22:9 - error TS2339: Property 'end' does not exist on type 'Promise<IFullResponse<unknown, { url: string; method: "POST"; headers: { origin: string; referer: string; 'content-type': string; 'user-agent': string; }; resolveWithFullResponse: true; }>>'.
22 req.end(buffer)
~~~
src/compress/tinypngweb.ts:24:13 - error TS2345: Argument of type '(data: Response) => Promise<Buffer>' is not assignable to parameter of type '(value: IFullResponse<unknown, { url: string; method: "POST"; headers: { origin: string; referer: string; 'content-type': string; 'user-agent': string; }; resolveWithFullResponse: true; }>) => Buffer | PromiseLike<...>'.
Types of parameters 'data' and 'value' are incompatible.
Type 'AxiosResponse<unknown, { url: string; method: "POST"; headers: { origin: string; referer: string; 'content-type': string; 'user-agent': string; }; resolveWithFullResponse: true; }> & { ...; }' is missing the following properties from type 'Response': statusMessage, caseless, toJSON, aborted, and 47 more.
24 .then((data: Response) => {
~~~~~~~~~~~~~~~~~~~~~
src/index.ts:54:53 - error TS2322: Type '(ctx: PicGo) => Promise<PicGo>' is not assignable to type '((ctx: IPicGo) => Promise<any>) | ((ctx: IPicGo) => void)'.
Type '(ctx: PicGo) => Promise<PicGo>' is not assignable to type '(ctx: IPicGo) => Promise<any>'.
Types of parameters 'ctx' and 'ctx' are incompatible.
Type 'IPicGo' is missing the following properties from type 'PicGo': _config, lifecycle, db, _pluginLoader, and 5 more.
54 ctx.helper.transformer.register('compress', { handle })
~~~~~~
node_modules/[email protected]@picgo/dist/types/index.d.ts:369:5
369 handle: ((ctx: IPicGo) => Promise<any>) | ((ctx: IPicGo) => void);
~~~~~~
The expected type comes from property 'handle' which is declared here on type 'IPlugin'
src/utils.ts:12:60 - error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value.
12 export async function fetchImage(ctx: PicGo, url: string): Promise<Buffer> {
~~~~~~~~~~~~~~~
Found 5 errors in 4 files.
Errors Files
1 src/compress/tinypng/tinypng.ts:94
2 src/compress/tinypngweb.ts:22
1 src/index.ts:54
1 src/utils.ts:12
上面的错误我也看到了,不过已经编译出来js 文件,我就没管了。
执行 rpm run build,重新编译生成dist 文件夹中内容,关闭 PicGo,将生成的 dist 文件复制到 PicGo用户数据目录中的 node_modules\picgo-plugin-compress 覆盖即可。
上面的错误我也看到了,不过已经编译出来js 文件,我就没管了。
执行 rpm run build,重新编译生成dist 文件夹中内容,关闭 PicGo,将生成的 dist 文件复制到 PicGo用户数据目录中的 node_modules\picgo-plugin-compress 覆盖即可。
刚试了下,还是不行,放弃了,先用另一个
为什么作者不更新
为什么作者不更新
我自己模仿也写了一个,可以试试,用的tinify的API https://www.npmjs.com/package/picgo-plugin-tinypng
已解决:#71