60late / vite-plugin-minipic

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

build报错,ENOENT: no such file or directory, open xxx #12

Open yangxu52 opened 1 month ago

yangxu52 commented 1 month ago

node:20.15.x vite:5.3.x vite-plugin-minipic:1.1.3

我的配置

{
    sharpOptions: {
        avif: { lossless: true }, 
    },
    convert: [
        { from: 'png', to: 'avif' },
        { from: 'jpg', to: 'avif' },
        { from: 'jpeg', to: 'avif' },
    ],
    cache: true, 
}

build时候报错:(可复现)

[vite-plugin-minipic] ENOENT: no such file or directory, open 'D:\Code\project\dist\D:\Code\project\public\data\images\posz.avif'
    at Object.openSync (node:fs:581:18)
    at Object.writeFileSync (node:fs:2365:35)
    at changePublicOutput (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:288:9)
    at 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:265:7
    at async Promise.all (index 0)
    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 handleGeneratePublic (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:392: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:405: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.

 1. 我想排除public/data目录下的所有文件,但是在exclude中使用正则去匹配路径,都失败了,想请教如何编写对应正则。  2. 修复bug。

yangxu52 commented 1 month ago

建议,检查参数newFilePath的值存在多重路径的问题'D:\Code\project\dist\D:\Code\project\public\data\images\posz.avif' https://github.com/60late/vite-plugin-minipic/blob/364fff2d75f23cc1915d9ebc33719d749a07369f/src/index.ts#L278-L292

60late commented 1 month ago

node:20.15.x vite:5.3.x vite-plugin-minipic:1.1.3

我的配置

{
    sharpOptions: {
        avif: { lossless: true }, 
    },
    convert: [
        { from: 'png', to: 'avif' },
        { from: 'jpg', to: 'avif' },
        { from: 'jpeg', to: 'avif' },
    ],
    cache: true, 
}

build时候报错:(可复现)

[vite-plugin-minipic] ENOENT: no such file or directory, open 'D:\Code\project\dist\D:\Code\project\public\data\images\posz.avif'
    at Object.openSync (node:fs:581:18)
    at Object.writeFileSync (node:fs:2365:35)
    at changePublicOutput (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:288:9)
    at 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:265:7
    at async Promise.all (index 0)
    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 handleGeneratePublic (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:392: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:405: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.

 1. 我想排除public/data目录下的所有文件,但是在exclude中使用正则去匹配路径,都失败了,想请教如何编写对应正则。  2. 修复bug。

1.目前exclude的粒度只做到了文件级,暂不支持对目录级别进行排除和包括。这个问题我会加入到后续的更新计划,重写include和exclude模块 2.该bug已和#13的bug一同修复。升级至1.2.0版本后进行尝试

yangxu52 commented 1 month ago

node:20.15.x vite:5.3.x vite-plugin-minipic:1.1.3 我的配置

{
    sharpOptions: {
        avif: { lossless: true }, 
    },
    convert: [
        { from: 'png', to: 'avif' },
        { from: 'jpg', to: 'avif' },
        { from: 'jpeg', to: 'avif' },
    ],
    cache: true, 
}

build时候报错:(可复现)

[vite-plugin-minipic] ENOENT: no such file or directory, open 'D:\Code\project\dist\D:\Code\project\public\data\images\posz.avif'
    at Object.openSync (node:fs:581:18)
    at Object.writeFileSync (node:fs:2365:35)
    at changePublicOutput (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:288:9)
    at 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:265:7
    at async Promise.all (index 0)
    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 handleGeneratePublic (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:392: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:405: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.

 1. 我想排除public/data目录下的所有文件,但是在exclude中使用正则去匹配路径,都失败了,想请教如何编写对应正则。  2. 修复bug。

1.目前exclude的粒度只做到了文件级,暂不支持对目录级别进行排除和包括。这个问题我会加入到后续的更新计划,重写include和exclude模块 2.该bug已和#13的bug一同修复。升级至1.2.0版本后进行尝试

还是报错,路径理面还是嵌套了D:xxxx的完整路径,日志:

[vite-plugin-minipic] ENOENT: no such file or directory, mkdir 'D:\Code\project\dist\D:\Code\project\public\data\images'
    at Object.mkdirSync (node:fs:1372:26)
    at safetyWriteFile (file:///D:/Code/project/node_modules/.pnpm/vite-plugin-minipic@1.2.0_rollup@4.18.1/node_modules/vite-plugin-minipic/dist/index.mjs:223:9)
    at changePublicOutput (file:///D:/Code/project/node_modules/.pnpm/vite-plugin-minipic@1.2.0_rollup@4.18.1/node_modules/vite-plugin-minipic/dist/index.mjs:298:5)       
    at file:///D:/Code/project/node_modules/.pnpm/vite-plugin-minipic@1.2.0_rollup@4.18.1/node_modules/vite-plugin-minipic/dist/index.mjs:274:7
    at async Promise.all (index 0)
    at async handleGenerateImgFiles (file:///D:/Code/project/node_modules/.pnpm/vite-plugin-minipic@1.2.0_rollup@4.18.1/node_modules/vite-plugin-minipic/dist/index.mjs:277:3)
    at async handleGeneratePublic (file:///D:/Code/project/node_modules/.pnpm/vite-plugin-minipic@1.2.0_rollup@4.18.1/node_modules/vite-plugin-minipic/dist/index.mjs:402:3)
    at async Object.generateBundle (file:///D:/Code/project/node_modules/.pnpm/vite-plugin-minipic@1.2.0_rollup@4.18.1/node_modules/vite-plugin-minipic/dist/index.mjs:415:7)
    at async Bundle.generate (file:///D:/Code/project/node_modules/.pnpm/rollup@4.18.1/node_modules/rollup/dist/es/shared/node-entry.js:18122:9)
    at async file:///D:/Code/project/node_modules/.pnpm/rollup@4.18.1/node_modules/rollup/dist/es/shared/node-entry.js:20661:27
    at async catchUnfinishedHookActions (file:///D:/Code/project/node_modules/.pnpm/rollup@4.18.1/node_modules/rollup/dist/es/shared/node-entry.js:20088:16)
    at async build (file:///D:/Code/project/node_modules/.pnpm/vite@5.3.3_@types+node@20.14.10_sass@1.77.8/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.8/node_modules/vite/dist/node/cli.js:828:5)
 ELIFECYCLE  Command failed with exit code 1.

通过打log,调用链向上找到handleGenerateImgFile函数中const imgInfo = getImgInfo(filePath);语句,调用的getImgInfo函数中的replace没有生效,因filePathpath.sep带过来的路径用的是\publicDir则是/,匹配失败。 https://github.com/60late/vite-plugin-minipic/blob/5d6c309ef849f77540e8ac9652e43d40713782a2/src/index.ts#L212-L213 后续就没有继续向上Log了,windows环境,poweshell。我有空试试Linux下bash的情况。