我正在尝试制作一个esbuild
使用 Sharp 将 GIF 转换为 PNG 的插件,但出现以下错误:
❯ npx esbuild .\src\utils\gif-to-png.ts --platform=node --bundle node_modules/sharp/lib/utility.js:7:22:错误:没有为“.node”文件配置加载器: node_modules/sharp/build/Release/sharp.node 7 │ const sharp = require('../build/Release/sharp.node'); ╵~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gif转png.ts
import fs from 'fs'
import path from 'path'
import sharp from 'sharp'
import { Plugin } from 'esbuild'
const ROOT_PATH = process.cwd()
const POSTS_PATH = path.join(ROOT_PATH, 'public')
function* walkSync(dir: fs.PathLike): any {
const files = fs.readdirSync(dir, { withFileTypes: true })
for (let i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
yield* walkSync(path.join(dir as string, files[i].name))
} else {
yield path.join(dir as string, files[i].name)
}
}
}
const gifToPng = async () => {
try {
for (let [i, file] of [...walkSync(POSTS_PATH)].entries()) {
const extname = path.extname(file)
if (extname === '.gif') {
console.log(file)
const dirname = path.dirname(file)
const png = path.resolve(dirname, path.basename(file).replace('.gif', '.png'))
await sharp(file).png().toFile(png)
}
}
} catch (e) {
console.error('Error thrown:', e)
}
}
export const gifToPngPlugin = (): Plugin => ({
name: 'gifToPng',
setup(build) {
build.onLoad({ filter: /\.gif$/ }, async (args) => {
const fileName = path.basename(args.path, '.gif')
let contents = await fs.promises.readFile(args.path, 'utf8')
console.log({ fileName, contents })
return {
contents,
loader: 'file',
}
})
},
})
我的代码仍在进行中,但我必须以某种方式调用gifToPng
函数,setup
以便将所有.gif
文件转换为.png
.
如何解决.node
加载程序问题?
编辑:
原来,ESBuild 还不支持.node
-> https://github.com/evanw/esbuild/issues/1051