From c5298f10a2b2afd744aacf4437b9c85f273e1a1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gunnlaugur=20=C3=9E=C3=B3r=20Briem?= Date: Thu, 23 Sep 2021 18:51:27 +0000 Subject: [PATCH] fix: declare ES module in package.json In bundler mode, generate the package.json with "type": "module" and use the "main" attribute instead of the "module" attribute. This change makes the built ES module palatable to node in --experimental-wasm-modules mode as well as to webpack as illustrated in https://github.com/webpack/webpack/pull/14313 --- src/manifest/mod.rs | 6 ++++-- src/manifest/npm/esmodules.rs | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/manifest/mod.rs b/src/manifest/mod.rs index 898de421..8af8b94b 100644 --- a/src/manifest/mod.rs +++ b/src/manifest/mod.rs @@ -699,6 +699,7 @@ impl CrateData { NpmPackage::ESModulesPackage(ESModulesPackage { name: data.name, + type_: "module".into(), collaborators: pkg.authors.clone(), description: self.manifest.package.description.clone(), version: pkg.version.to_string(), @@ -713,7 +714,7 @@ impl CrateData { url: repo_url, }), files: data.files, - module: data.main, + main: data.main, homepage: data.homepage, types: data.dts_file, side_effects: false, @@ -729,6 +730,7 @@ impl CrateData { NpmPackage::ESModulesPackage(ESModulesPackage { name: data.name, + type_: "module".into(), collaborators: pkg.authors.clone(), description: self.manifest.package.description.clone(), version: pkg.version.to_string(), @@ -743,7 +745,7 @@ impl CrateData { url: repo_url, }), files: data.files, - module: data.main, + main: data.main, homepage: data.homepage, types: data.dts_file, side_effects: false, diff --git a/src/manifest/npm/esmodules.rs b/src/manifest/npm/esmodules.rs index 640a9269..2aa69c87 100644 --- a/src/manifest/npm/esmodules.rs +++ b/src/manifest/npm/esmodules.rs @@ -3,6 +3,8 @@ use manifest::npm::repository::Repository; #[derive(Serialize)] pub struct ESModulesPackage { pub name: String, + #[serde(rename = "type")] + pub type_: String, #[serde(skip_serializing_if = "Vec::is_empty")] pub collaborators: Vec, #[serde(skip_serializing_if = "Option::is_none")] @@ -14,7 +16,7 @@ pub struct ESModulesPackage { pub repository: Option, #[serde(skip_serializing_if = "Vec::is_empty")] pub files: Vec, - pub module: String, + pub main: String, #[serde(skip_serializing_if = "Option::is_none")] pub homepage: Option, #[serde(skip_serializing_if = "Option::is_none")]