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
master
Gunnlaugur Þór Briem 4 years ago
parent 7ccacca937
commit c5298f10a2
  1. 6
      src/manifest/mod.rs
  2. 4
      src/manifest/npm/esmodules.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,

@ -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<String>,
#[serde(skip_serializing_if = "Option::is_none")]
@ -14,7 +16,7 @@ pub struct ESModulesPackage {
pub repository: Option<Repository>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub files: Vec<String>,
pub module: String,
pub main: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub homepage: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]

Loading…
Cancel
Save