Files
embedfs/README.md
T
2026-05-05 23:02:06 +03:00

91 lines
1.8 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Embedding Directories into Executables
The `$embed_file()` call in V embeds only a single file. This module makes it
easy to embed entire directories into the final executable.
File embedding in V is done at compile time, and there is no way to dynamically
embed arbitrary files into an application. The `embedfs` module is a simple
code generator that creates a separate `.v` file with the code for embedding
files.
## Installation
```
v install https://github.com/gechandesu/embedfs
```
## Usage
For example you have following file structure:
```
./
├── src/
│   ├── assets/
│   │   ├── css/
│   │   │   └── style.css
│   │   └── js/
│   │   └── app.js
│   └── main.v
└── v.mod
```
Lets embed the `assets` directory.
Create `embed_assets.vsh` next to v.mod:
```v
#!/usr/bin/env v
import os
import embedfs
os.chdir('src')!
assets := embedfs.generate('assets')!
os.write_file('assets_generated.v', assets)!
```
Run it:
```
v run embed_assets.vsh
```
Now you have `src/assets_generated.v`. Take a look inside it:
```v
module main
const embed_files = {
'assets/css/style.css': $embed_file('assets/css/style.css')
'assets/js/app.js': $embed_file('assets/js/app.js')
}
```
You can use it in `src/main.v` in this way:
```v
module main
fn main() {
style := unsafe { embed_files['assets/css/style.css'].to_string() }
println(style)
}
```
The map type is `map[string]embed_file.EmbedFileData`, see the
[v.embed_file](https://modules.vlang.io/v.embed_file.html#EmbedFileData)
module docs for details.
## `bin2v` tool
Also there is `v bin2v` utility that generates the V modules with embedded
files. See:
```
v help bin2v
```
In contrast with embedfs, bin2v generates constants into which it writes
files as fixed-length byte arrays.