60late / vite-plugin-minipic

Based on sharp.js, compress your image before vite generate bundle. It's easy and fast! 基于sharp.js的vite图片压缩插件,又快又好用!
29 stars 3 forks source link

build报错,ENOENT: no such file or directory, mkdir xxx #13

Open yangxu52 opened 2 weeks ago

yangxu52 commented 2 weeks ago

node:20.15.x vite:5.3.x

插件使用默认配置。

build时候报错:(可复现)

[vite-plugin-minipic] ENOENT: no such file or directory, mkdir 'D:\Code\project\node_modules\.cache\assets\images'
    at Object.mkdirSync (node:fs:1372:26)
    at DiskCache.directoryGuard (file:///D:/Code/project/node_modules/.pnpm/vite-plugin-minipic@1.1.3_rollup@4.18.0/node_modules/vite-plugin-minipic/dist/index.mjs:66:10)
    at DiskCache.set (file:///D:/Code/project/node_modules/.pnpm/vite-plugin-minipic@1.1.3_rollup@4.18.0/node_modules/vite-plugin-minipic/dist/index.mjs:57:10)
    at generateFileByCompress (file:///D:/Code/project/node_modules/.pnpm/vite-plugin-minipic@1.1.3_rollup@4.18.0/node_modules/vite-plugin-minipic/dist/index.mjs:301:13)
    at async file:///D:/Code/project/node_modules/.pnpm/vite-plugin-minipic@1.1.3_rollup@4.18.0/node_modules/vite-plugin-minipic/dist/index.mjs:256:19
    at async Promise.all (index 2)
    at async handleGenerateImgFiles (file:///D:/Code/project/node_modules/.pnpm/vite-plugin-minipic@1.1.3_rollup@4.18.0/node_modules/vite-plugin-minipic/dist/index.mjs:268:3)
    at async handleGenerateBundle (file:///D:/Code/project/node_modules/.pnpm/vite-plugin-minipic@1.1.3_rollup@4.18.0/node_modules/vite-plugin-minipic/dist/index.mjs:384:3)
    at async Object.generateBundle (file:///D:/Code/project/node_modules/.pnpm/vite-plugin-minipic@1.1.3_rollup@4.18.0/node_modules/vite-plugin-minipic/dist/index.mjs:406:7)
    at async Bundle.generate (file:///D:/Code/project/node_modules/.pnpm/rollup@4.18.0/node_modules/rollup/dist/es/shared/node-entry.js:18153:9)
    at async file:///D:/Code/project/node_modules/.pnpm/rollup@4.18.0/node_modules/rollup/dist/es/shared/node-entry.js:20692:27
    at async catchUnfinishedHookActions (file:///D:/Code/project/node_modules/.pnpm/rollup@4.18.0/node_modules/rollup/dist/es/shared/node-entry.js:20119:16)
    at async build (file:///D:/Code/project/node_modules/.pnpm/vite@5.3.3_@types+node@20.14.10_sass@1.77.6_terser@5.31.1/node_modules/vite/dist/node/chunks/dep-CzJTQ5q7.js:65741:16)   
    at async CAC.<anonymous> (file:///D:/Code/project/node_modules/.pnpm/vite@5.3.3_@types+node@20.14.10_sass@1.77.6_terser@5.31.1/node_modules/vite/dist/node/cli.js:828:5)
 ELIFECYCLE  Command failed with exit code 1.

看样子是因为mkdirSync直接创建嵌套文件夹导致问题,是否传递了{ recursive: true }参数

60late commented 1 week ago

现在是否使用的v1.1.3版本?这个版本应当修复了这个问题

yangxu52 commented 1 week ago

现在是否使用的v1.1.3版本?这个版本应当修复了这个问题

是最新版的v1.1.3,

仓库代码,L61改为:fs.mkdirSync(directory, { recursive: true }),可以创建嵌套文件夹 https://github.com/60late/vite-plugin-minipic/blob/364fff2d75f23cc1915d9ebc33719d749a07369f/src/cache.ts#L55-L63

60late commented 1 week ago

现在是否使用的v1.1.3版本?这个版本应当修复了这个问题

是最新版的v1.1.3,

  • pnpm v9.3.0-9.5.0

看了一下,目前对嵌套文件夹的相关操作确实有一些问题,会在近期内对所有文件操作进行检查并且修复

yangxu52 commented 1 week ago

现在是否使用的v1.1.3版本?这个版本应当修复了这个问题

是最新版的v1.1.3,

  • pnpm v9.3.0-9.5.0

看了一下,目前对嵌套文件夹的相关操作确实有一些问题,会在近期内对所有文件操作进行检查并且修复

建议在.cahce下创建一个本插件专用的目录,比如minipic,可以避免潜在的与其他使用.cache目录的程序冲突的可能。

并且另外一个issue #12 是和本issue不同的,这个是默认配置,#12是转换了图片的格式。

60late commented 1 week ago

现在是否使用的v1.1.3版本?这个版本应当修复了这个问题

是最新版的v1.1.3,

  • pnpm v9.3.0-9.5.0

看了一下,目前对嵌套文件夹的相关操作确实有一些问题,会在近期内对所有文件操作进行检查并且修复

建议在.cahce下创建一个本插件专用的目录,比如minipic,可以避免潜在的与其他使用.cache目录的程序冲突的可能。

并且另外一个issue #12 是和本issue不同的,这个是默认配置,#12是转换了图片的格式。

你好,在1.2.0版本中新增了.cache/minipic目录。并且对压缩和初始化时都对目录进行了recursive判定。 可以更新插件版本后试一下

yangxu52 commented 1 week ago

默认配置没有问题了。

不过通过log发现:public目录的图片和src下的目录有行为也有差距。

filePath publicDir path2.sep
convert&public \ / \
convert&src/** / / \
public \ / \
src/** / / \

因为convert情况下会报错,打不了convert&src/**这个情况的日志。我注释了handleGenerateImgFiles函数中changePublicOutput(imgInfo, imgBuffer);这句调用得到的结果。