diff --git a/src/bindgen.rs b/src/bindgen.rs index d50d2f7..acf369f 100644 --- a/src/bindgen.rs +++ b/src/bindgen.rs @@ -29,17 +29,14 @@ pub fn wasm_bindgen_build( }; let out_dir = out_dir.to_str().unwrap(); - let has_target_dir_overwrite = extra_options.contains(&"--target-dir".to_string()); - let target_directory = if has_target_dir_overwrite { - let i = extra_options - .binary_search(&"--target-dir".to_string()) - .unwrap(); - extra_options - .get(i + 1) + + let target_directory = { + let mut has_target_dir_iter = extra_options.iter(); + has_target_dir_iter + .find(|&it| it == "--target-dir") + .and_then(|_| has_target_dir_iter.next()) .map(Path::new) .unwrap_or(data.target_directory()) - } else { - data.target_directory() }; let wasm_path = target_directory diff --git a/tests/all/build.rs b/tests/all/build.rs index 4b87e4f..4e89e2c 100644 --- a/tests/all/build.rs +++ b/tests/all/build.rs @@ -37,6 +37,20 @@ fn it_should_not_make_a_pkg_json_if_passed_no_pack() { assert_eq!(pkg_path.join("licence").exists(), false); } +#[test] +fn it_should_build_js_hello_world_example_with_custom_target_dir() { + let fixture = utils::fixture::js_hello_world(); + fixture + .wasm_pack() + .arg("build") + .arg("--target-dir") + .arg("target2") + .arg("--all-features") + .arg("--offline") + .assert() + .success(); +} + #[test] fn it_should_build_crates_in_a_workspace() { let fixture = utils::fixture::Fixture::new();