mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
feat(compile): ability to embed directory in executable (#26939)
This commit is contained in:
parent
46b6037644
commit
6b478cd0a3
7 changed files with 50 additions and 6 deletions
|
@ -1909,10 +1909,10 @@ On the first invocation with deno will download the proper binary and cache it i
|
||||||
Arg::new("include")
|
Arg::new("include")
|
||||||
.long("include")
|
.long("include")
|
||||||
.help(
|
.help(
|
||||||
cstr!("Includes an additional module or local data file in the compiled executable.
|
cstr!("Includes an additional module or file/directory in the compiled executable.
|
||||||
<p(245)>Use this flag if a dynamically imported module or a web worker main module
|
<p(245)>Use this flag if a dynamically imported module or a web worker main module
|
||||||
fails to load in the executable or to embed a file in the executable. This flag can
|
fails to load in the executable or to embed a file or directory in the executable.
|
||||||
be passed multiple times, to include multiple additional modules.</>",
|
This flag can be passed multiple times, to include multiple additional modules.</>",
|
||||||
))
|
))
|
||||||
.action(ArgAction::Append)
|
.action(ArgAction::Append)
|
||||||
.value_hint(ValueHint::FilePath)
|
.value_hint(ValueHint::FilePath)
|
||||||
|
|
|
@ -620,10 +620,18 @@ impl<'a> DenoCompileBinaryWriter<'a> {
|
||||||
};
|
};
|
||||||
for include_file in include_files {
|
for include_file in include_files {
|
||||||
let path = deno_path_util::url_to_file_path(include_file)?;
|
let path = deno_path_util::url_to_file_path(include_file)?;
|
||||||
|
if path.is_dir() {
|
||||||
|
// TODO(#26941): we should analyze if any of these are
|
||||||
|
// modules in order to include their dependencies
|
||||||
|
vfs
|
||||||
|
.add_dir_recursive(&path)
|
||||||
|
.with_context(|| format!("Including {}", path.display()))?;
|
||||||
|
} else {
|
||||||
vfs
|
vfs
|
||||||
.add_file_at_path(&path)
|
.add_file_at_path(&path)
|
||||||
.with_context(|| format!("Including {}", path.display()))?;
|
.with_context(|| format!("Including {}", path.display()))?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
let mut remote_modules_store = RemoteModulesStoreBuilder::default();
|
let mut remote_modules_store = RemoteModulesStoreBuilder::default();
|
||||||
let mut code_cache_key_hasher = if self.cli_options.code_cache_enabled() {
|
let mut code_cache_key_hasher = if self.cli_options.code_cache_enabled() {
|
||||||
Some(FastInsecureHasher::new_deno_versioned())
|
Some(FastInsecureHasher::new_deno_versioned())
|
||||||
|
|
24
tests/specs/compile/include_folder/__test__.jsonc
Normal file
24
tests/specs/compile/include_folder/__test__.jsonc
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
"tempDir": true,
|
||||||
|
"steps": [{
|
||||||
|
"if": "unix",
|
||||||
|
"args": "compile --allow-read=data --include data --output main main.js",
|
||||||
|
"output": "[WILDCARD]"
|
||||||
|
}, {
|
||||||
|
"if": "unix",
|
||||||
|
"commandName": "./main",
|
||||||
|
"args": [],
|
||||||
|
"output": "output.out",
|
||||||
|
"exitCode": 0
|
||||||
|
}, {
|
||||||
|
"if": "windows",
|
||||||
|
"args": "compile --allow-read=data --include data --output main.exe main.js",
|
||||||
|
"output": "[WILDCARD]"
|
||||||
|
}, {
|
||||||
|
"if": "windows",
|
||||||
|
"commandName": "./main.exe",
|
||||||
|
"args": [],
|
||||||
|
"output": "output.out",
|
||||||
|
"exitCode": 0
|
||||||
|
}]
|
||||||
|
}
|
1
tests/specs/compile/include_folder/data/a.txt
Normal file
1
tests/specs/compile/include_folder/data/a.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
a
|
1
tests/specs/compile/include_folder/data/b.txt
Normal file
1
tests/specs/compile/include_folder/data/b.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
b
|
8
tests/specs/compile/include_folder/main.js
Normal file
8
tests/specs/compile/include_folder/main.js
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
const dataDir = import.meta.dirname + "/data";
|
||||||
|
const files = Array.from(
|
||||||
|
Deno.readDirSync(dataDir).map((entry) => dataDir + "/" + entry.name),
|
||||||
|
);
|
||||||
|
files.sort();
|
||||||
|
for (const file of files) {
|
||||||
|
console.log(Deno.readTextFileSync(file).trim());
|
||||||
|
}
|
2
tests/specs/compile/include_folder/output.out
Normal file
2
tests/specs/compile/include_folder/output.out
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
a
|
||||||
|
b
|
Loading…
Reference in a new issue