본문으로 건너뛰기

추가 파일 끼워넣기

프론트엔드(distDir)의 일부가 아니라거나, 바이너리에 인라인하기에는 너무 크다거나 하는 이유로 추가 파일을 앱 번들에 포함해야하는 경우가 있습니다. 그런 파일을 여기서는 resources라고 부릅니다.

선택한 파일들을 묶으려면 tauri.conf.jsontauri > bundle 개체 resources 속성에 추가해야 합니다.

tauri.conf.json 구성에 대해 자세한 내용은 here에서 볼수 있습니다.

resources은 대상 파일에 절대, 상대 경로가 있는 문자열 목록을 말합니다. 디렉토리에서 여러 파일을 포함해야 하는 경우 glob 패턴을 지원합니다.

다음은 설정 관련 내용을 설명하는 샘플입니다. tauri.conf.json 파일 전체를 나타내지 않습니다.

tauri.conf.json
{
"tauri": {
"bundle": {
"resources": [
"/absolute/path/to/textfile.txt",
"relative/path/to/jsonfile.json",
"resources/*"
]
},
"allowlist": {
"fs": {
"scope": ["$RESOURCE/*"]
}
}
}
}
노트

절대 경로 및 상위 구성 요소(../) 를 포함하는 경로는 "$RESOURCE/*"를 통해서만 허용됩니다. "path/to/file.txt"와 같은 상대 경로는 "$RESOURCE/path/to/file.txt"를 통해 명시적으로 허용됩니다.

JavaScript에서 파일 접근하기

이번 예제에서는 다음과 같은 추가 i18n json 파일을 묶으려고 합니다:

de.json
{
"hello": "Guten Tag!",
"bye": "Auf Wiedersehen!"
}

이런 경우, 이 파일들을 tauri.conf.json 옆에 있는 lang 디렉토리에 저장합니다. "lang/*"resources에 추가하고 $RESOURCE/lang/*을 위와 같이 fs 범위에 추가합니다.

path > all를 활성화 하고, 필요한 fs APIs fs > readTextFile예제를 참고하여 허용 목록을 구성해야 합니다.

import { resolveResource } from '@tauri-apps/api/path'
// alternatively, use `window.__TAURI__.path.resolveResource`
import { readTextFile } from '@tauri-apps/api/fs'
// alternatively, use `window.__TAURI__.fs.readTextFile`

// `lang/de.json` is the value specified on `tauri.conf.json > tauri > bundle > resources`
const resourcePath = await resolveResource('lang/de.json')
const langDe = JSON.parse(await readTextFile(resourcePath))

console.log(langDe.hello) // This will print 'Guten Tag!' to the devtools console

Rust에서 파일 접근하기

이것은 위의 예를 기반으로 합니다. On the Rust side, you need an instance of the PathResolver which you can get from App and AppHandle:

tauri::Builder::default()
.setup(|app| {
let resource_path = app.path_resolver()
.resolve_resource("lang/de.json")
.expect("failed to resolve resource");

let file = std::fs::File::open(&resource_path).unwrap();
let lang_de: serde_json::Value = serde_json::from_reader(file).unwrap();

println!("{}", lang_de.get("hello").unwrap()); // 'Guten Tag!'을 터미널에 출력할 겁니다.

Ok(())
})
#[tauri::command]
fn hello(handle: tauri::AppHandle) -> String {
let resource_path = handle.path_resolver()
.resolve_resource("lang/de.json")
.expect("failed to resolve resource");

let file = std::fs::File::open(&resource_path).unwrap();
let lang_de: serde_json::Value = serde_json::from_reader(file).unwrap();

lang_de.get("hello").unwrap()
}