在打包的时候, 我们需要将一些文件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' }
]
}),
]