rollup-plugin-copy在 vite@5.0.11中不生效解决办法

在打包的时候, 我们需要将一些文件copy到 打包后的目录.

使用 vite 可以很方便的复用 rollup的插件生态, 但是发现一个小小的问题,需要我们自己注意一下

环境说明

sql 复制代码
node: 20.10.0
rollup-plugin-copy  3.5.0
vite  5.0.11

截止到 2024-01-09 ,插件均为最新版本

安装

shell 复制代码
pnpm add rollup-plugin-copy vite -D

使用

不生效的写法

js 复制代码
import { defineConfig } from 'vite'
import copy from 'rollup-plugin-copy'

export default defineConfig({
    build: {
        outDir: 'lib',
        lib: {
          entry: resolve('./src/index.js'),
          name: 'test-ui',
          fileName: 'ems'
        },
    }),
    plugins: [
        ...其他插件
        copy({
          targets: [
            { src: './package.json', dest: './lib' }
          ]
        }),

    ]
})

发现在 输出目录 lib下面使用没有 要搬运的文件 package.json。

可能是 rollup-plugin-copy 的版本与 rollup 存在差异, 主要应该是 rollup hooks 的差异, 现在,我们将执行时机改为 由 buildEnd 改为 closeBundle

buildEnd 是 rollup-plugin-copy 使用的默认的 hook

  • buildEnd 执行时机:在 Rollup 完成产物但尚未调用 generate 或 write 之前调用;也可以返回一个 Promise。如果在构建过程中发生错误,则将其传递给此钩子。

  • closeBundle: 可用于清理可能正在运行的任何外部服务。Rollup 的 CLI 将确保在每次运行后调用此钩子,但是 JavaScript API 的用户有责任在生成产物后手动调用 bundle.close()。因此,任何依赖此功能的插件都应在其文档中仔细提到这一点 - 需要手动维护资源的释放

修改为:

js 复制代码
 plugins: [
     ...其他插件
    copy({
      // 显示日志
      verbose: true,
      hook: 'closeBundle',
      targets: [
        { src: './package.json', dest: './lib' }
      ]
    }),
  ]
相关推荐
卸任4 小时前
Vibe coding工具使用心得
前端·ai编程
brien95 小时前
为什么模型标称 1M,Google Antigravity 聊到 256K 却突然失忆?我们给它做了个原生行内监控圆环
前端
修炼的dance5 小时前
录屏关键帧间隔多少合适?六档实测,2秒到10秒小了75.6%
前端
Lank_M5 小时前
关键帧从1秒拉到10秒,录屏小87.3%,摄像头小10.8%
前端
补码缩写5 小时前
用 ffprobe 拆录屏,八成字节在 29 个关键帧上
前端
百思不得小李5 小时前
一个复杂的动态表单是如何实现的
前端·设计模式
陈随易5 小时前
Cmder 停更 17 个月,2.0 支持 Windows Terminal
前端·后端·程序员
风骏时光牛马6 小时前
前沿视界
前端
kyriewen6 小时前
我扫了 814 个依赖,97 个还敢要 Node 10
前端·javascript·程序员
陈随易6 小时前
3000 万人在用的翻译插件,重写一遍就是一门生意
前端·后端·程序员