Skip to content

vite-plugin-cp

npm package

一个用于复制文件/目录,并支持灵活转换文件内容、保留或扁平化目录结构、自定义文件重命名等的Vite插件。

NPM versionNPM DownloadsNode version

安装

bash
npm add vite-plugin-cp
bash
pnpm add vite-plugin-cp
bash
yarn add vite-plugin-cp

功能特性

  • 📁 支持使用glob模式复制文件/目录
  • 🔄 在复制前灵活转换文件内容
  • 📦 可保留或扁平化目录结构
  • 🛠️ 自定义文件重命名
  • 🔄 支持JavaScript和TypeScript项目
  • ⚡ 在Vite的构建生命周期中运行

使用示例

js
import { defineConfig } from 'vite';
import cp from 'vite-plugin-cp';

export default defineConfig({
  plugins: [
    cp({
      targets: [
        // 从 'node_modules/vite/dist' 复制所有文件到 'dist/cp/test'
        { src: './node_modules/vite/dist', dest: 'dist/cp/test', flatten: true },

        // 将 'node_modules/vite/dist' 的所有文件复制到 'dist/cp/test2',保留目录结构
        { src: './node_modules/vite/dist', dest: 'dist/cp/test2' },

        // 将 'node_modules/vite' 的README.md文件复制到 'dist/cp'
        { src: './node_modules/vite/README.md', dest: 'dist/cp' },

        // 重命名复制文件
        { src: './node_modules/vite/index.cjs', dest: 'dist/cp', rename: 'index.js' },

        // 复制所有.ts文件到目标目录
        { src: './node_modules/vite/**/*.ts', dest: 'dist/cp/types' },

        // 动态重命名.ts文件
        {
          src: './node_modules/vite/**/*.ts', dest: 'dist/cp/types2', 
          rename(name) {
            return name.replace('.d.ts', '.ts');
          }
        },

        // 转换JSON文件内容
        {
          src: './node_modules/vite/package.json', dest: 'dist/cp', 
          transform(buf) {
            const pkg = JSON.parse(buf.toString());
            return JSON.stringify({
              ...pkg,
              name: 'vite-plugin-cp-test',
              version: '1.0.0'
            }, null, 2);
          }
        }
      ]
    })
  ]
});