diff --git a/crates/cli-support/src/js/mod.rs b/crates/cli-support/src/js/mod.rs
index ec0c10d8cfe1..10552295bdb6 100644
--- a/crates/cli-support/src/js/mod.rs
+++ b/crates/cli-support/src/js/mod.rs
@@ -166,7 +166,7 @@ impl<'a> Context<'a> {
format!("__exports.{} = {};\n", name, contents)
}
}
- OutputMode::Bundler
+ OutputMode::Bundler { .. }
| OutputMode::Node {
experimental_modules: true,
} => {
@@ -178,7 +178,7 @@ impl<'a> Context<'a> {
format!("export const {} = {};\n", name, contents)
}
}
- OutputMode::Browser => {
+ OutputMode::Web => {
// In browser mode there's no need to export the internals of
// wasm-bindgen as we're not using the module itself as the
// import object but rather the `__exports` map we'll be
@@ -202,7 +202,7 @@ impl<'a> Context<'a> {
};
self.global(&global);
- if self.config.mode.browser() {
+ if self.config.mode.web() {
self.global(&format!("__exports.{} = {0};", name));
}
}
@@ -300,7 +300,7 @@ impl<'a> Context<'a> {
}
/// Performs the task of actually generating the final JS module, be it
- /// `--no-modules`, `--browser`, or for bundlers. This is the very last step
+ /// `--no-modules`, `--web`, or for bundlers. This is the very last step
/// performed in `finalize`.
fn finalize_js(&mut self, module_name: &str, needs_manual_start: bool) -> (String, String) {
let mut js = String::new();
@@ -340,7 +340,7 @@ impl<'a> Context<'a> {
// With Bundlers and modern ES6 support in Node we can simply import
// the wasm file as if it were an ES module and let the
// bundler/runtime take care of it.
- OutputMode::Bundler
+ OutputMode::Bundler { .. }
| OutputMode::Node {
experimental_modules: true,
} => {
@@ -354,7 +354,7 @@ impl<'a> Context<'a> {
// browsers don't support natively importing wasm right now so we
// expose the same initialization function as `--no-modules` as the
// default export of the module.
- OutputMode::Browser => {
+ OutputMode::Web => {
js.push_str("const __exports = {};\n");
self.imports_post.push_str("let wasm;\n");
init = self.gen_init(&module_name, needs_manual_start);
@@ -752,10 +752,10 @@ impl<'a> Context<'a> {
})?;
self.bind("__wbindgen_module", &|me| {
- if !me.config.mode.no_modules() && !me.config.mode.browser() {
+ if !me.config.mode.no_modules() && !me.config.mode.web() {
bail!(
"`wasm_bindgen::module` is currently only supported with \
- --no-modules"
+ --no-modules and --web"
);
}
Ok(format!(
@@ -2843,13 +2843,13 @@ impl<'a, 'b> SubContext<'a, 'b> {
if is_local_snippet {
bail!(
"local JS snippets are not supported with `--no-modules`; \
- use `--browser` or no flag instead",
+ use `--web` or no flag instead",
);
}
if let decode::ImportModule::Named(module) = &import.module {
bail!(
"import from `{}` module not allowed with `--no-modules`; \
- use `--nodejs`, `--browser`, or no flag instead",
+ use `--nodejs`, `--web`, or no flag instead",
module
);
}
diff --git a/crates/cli-support/src/lib.rs b/crates/cli-support/src/lib.rs
index 6bd78e7ceaa1..3caca5fa10c6 100755
--- a/crates/cli-support/src/lib.rs
+++ b/crates/cli-support/src/lib.rs
@@ -36,8 +36,8 @@ pub struct Bindgen {
}
enum OutputMode {
- Bundler,
- Browser,
+ Bundler { browser_only: bool },
+ Web,
NoModules { global: String },
Node { experimental_modules: bool },
}
@@ -59,7 +59,7 @@ impl Bindgen {
Bindgen {
input: Input::None,
out_name: None,
- mode: OutputMode::Bundler,
+ mode: OutputMode::Bundler { browser_only: false },
debug: false,
typescript: false,
demangle: true,
@@ -93,7 +93,7 @@ impl Bindgen {
fn switch_mode(&mut self, mode: OutputMode, flag: &str) -> Result<(), Error> {
match self.mode {
- OutputMode::Bundler => self.mode = mode,
+ OutputMode::Bundler { .. } => self.mode = mode,
_ => bail!(
"cannot specify `{}` with another output mode already specified",
flag
@@ -126,9 +126,9 @@ impl Bindgen {
Ok(self)
}
- pub fn browser(&mut self, browser: bool) -> Result<&mut Bindgen, Error> {
- if browser {
- self.switch_mode(OutputMode::Browser, "--browser")?;
+ pub fn web(&mut self, web: bool) -> Result<&mut Bindgen, Error> {
+ if web {
+ self.switch_mode(OutputMode::Web, "--web")?;
}
Ok(self)
}
@@ -145,6 +145,16 @@ impl Bindgen {
Ok(self)
}
+ pub fn browser(&mut self, browser: bool) -> Result<&mut Bindgen, Error> {
+ if browser {
+ match &mut self.mode {
+ OutputMode::Bundler { browser_only } => *browser_only = true,
+ _ => bail!("cannot specify `--browser` with other output types"),
+ }
+ }
+ Ok(self)
+ }
+
pub fn no_modules_global(&mut self, name: &str) -> Result<&mut Bindgen, Error> {
match &mut self.mode {
OutputMode::NoModules { global } => *global = name.to_string(),
@@ -660,15 +670,16 @@ impl OutputMode {
fn always_run_in_browser(&self) -> bool {
match self {
- OutputMode::Browser => true,
+ OutputMode::Web => true,
OutputMode::NoModules { .. } => true,
+ OutputMode::Bundler { browser_only } => *browser_only,
_ => false,
}
}
- fn browser(&self) -> bool {
+ fn web(&self) -> bool {
match self {
- OutputMode::Browser => true,
+ OutputMode::Web => true,
_ => false,
}
}
diff --git a/crates/cli/src/bin/wasm-bindgen.rs b/crates/cli/src/bin/wasm-bindgen.rs
index 4cea6086bac5..03f025c99693 100644
--- a/crates/cli/src/bin/wasm-bindgen.rs
+++ b/crates/cli/src/bin/wasm-bindgen.rs
@@ -22,7 +22,8 @@ Options:
--out-dir DIR Output directory
--out-name VAR Set a custom output filename (Without extension. Defaults to crate name)
--nodejs Generate output that only works in node.js
- --browser Generate output that only works in a browser
+ --web Generate output that only works in a browser
+ --browser Hint that JS should only be compatible with a browser
--no-modules Generate output that only works in a browser (without modules)
--no-modules-global VAR Name of the global variable to initialize
--typescript Output a TypeScript definition file (on by default)
@@ -41,6 +42,7 @@ Options:
struct Args {
flag_nodejs: bool,
flag_browser: bool,
+ flag_web: bool,
flag_no_modules: bool,
flag_typescript: bool,
flag_no_typescript: bool,
@@ -89,6 +91,7 @@ fn rmain(args: &Args) -> Result<(), Error> {
let mut b = Bindgen::new();
b.input_path(input)
.nodejs(args.flag_nodejs)?
+ .web(args.flag_web)?
.browser(args.flag_browser)?
.no_modules(args.flag_no_modules)?
.debug(args.flag_debug)
diff --git a/examples/without-a-bundler-no-modules/README.md b/examples/without-a-bundler-no-modules/README.md
index 4747e2909b55..891d84795fbe 100644
--- a/examples/without-a-bundler-no-modules/README.md
+++ b/examples/without-a-bundler-no-modules/README.md
@@ -14,8 +14,8 @@ and then opening `index.html` in a browser should run the example!
Note that this example is in contrast to the [without a bundler][wab] example
which performs a similar purpose except it uses `--no-modules` instead of
-`--browser`. The main difference here is how the shim JS and module are loaded,
-where this example uses old-school `script` tags while `--browser` uses ES
+`--web`. The main difference here is how the shim JS and module are loaded,
+where this example uses old-school `script` tags while `--web` uses ES
modules.
[wab]: https://github.com/rustwasm/wasm-bindgen/tree/master/examples/without-a-bundler
diff --git a/examples/without-a-bundler-no-modules/index.html b/examples/without-a-bundler-no-modules/index.html
index 7d4e194abd1a..63d3e4df3b1a 100644
--- a/examples/without-a-bundler-no-modules/index.html
+++ b/examples/without-a-bundler-no-modules/index.html
@@ -7,8 +7,8 @@