Skip to content

kareljan/vite-plugin-static-copy

 
 

Repository files navigation

vite-plugin-static-copy

npm version CI MIT License

rollup-plugin-copy for vite with dev server support.

Note Before you use this plugin, consider using public directory or import in JavaScript. In most cases, these will work.

Install

npm i -D vite-plugin-static-copy # yarn add -D vite-plugin-static-copy

Usage

Add viteStaticCopy plugin to vite.config.js / vite.config.ts.

// vite.config.js / vite.config.ts
import { viteStaticCopy } from 'vite-plugin-static-copy'

export default {
  plugins: [
    viteStaticCopy({
      targets: [
        {
          src: 'bin/example.wasm',
          dest: 'wasm-files'
        }
      ]
    })
  ]
}

For example, if you use the config above, you will be able to fetch bin/example.wasm with fetch('/wasm-files/example.wasm'). So the file will be copied to dist/wasm-files/example.wasm.

Warning

If you are using Windows, make sure to use normalizePath after doing path.resolve or else. / is a escape charactor in fast-glob and you should use /.

import { normalizePath } from 'vite'
import path from 'node:path'

normalizePath(path.resolve(__dirname, './foo'))

// instead of
path.resolve(__dirname, './foo')

See fast-glob documentation about this for more details.

Options

See options.ts.

Differences with rollup-plugin-copy

  • Faster dev server start up than using rollup-plugin-copy on buildStart hook.
    • Files are not copied and served directly from server during dev to reduce start up time.
  • dest is relative to build.outDir.
    • If you are going to copy files outside build.outDir, you could use rollup-plugin-copy instead. Because that will not require dev server support.
  • fast-glob is used instead of globby.
    • Because fast-glob is used inside vite.
  • transform could return null as a way to tell the plugin not to copy the file, this is similar to the CopyWebpackPlugin#filter option, but it expects transform to return the original content in case you want it to be copied.
  • transform can optionally be an object, with a handler property (with the same signature of the rollup-plugin-copy transform option) and a encoding property (BufferEncoding | 'buffer') that will be used to read the file content so that handler's content argument will reflect the correct encoding (could be Buffer);

About

rollup-plugin-copy with dev server support.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 98.0%
  • JavaScript 2.0%