Skip to content

Commit 3067422

Browse files
dummdidummbluwy
andauthored
[fix] add svelte field when packaging (#2431)
Several heuristics in Kit/vite-plugin-svelte to tell Vite to mark Svelte packages rely on the "svelte" property. Vite/Rollup/Webpack plugin can all deal with it. Fixes #1959 Co-authored-by: Bjorn Lu <[email protected]>
1 parent 4f748a9 commit 3067422

File tree

9 files changed

+49
-7
lines changed

9 files changed

+49
-7
lines changed

.changeset/friendly-chefs-draw.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/kit': patch
3+
---
4+
5+
Add "svelte" field to package.json when running package command

packages/kit/src/packaging/index.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export async function make_package(config, cwd = process.cwd()) {
3939

4040
/** @type {Record<string, string>} */
4141
const clashes = {};
42+
let contains_svelte_files = false;
4243

4344
for (const file of files) {
4445
const ext = path.extname(file);
@@ -66,6 +67,7 @@ export async function make_package(config, cwd = process.cwd()) {
6667
out_contents = config.preprocess
6768
? (await preprocess(source, config.preprocess, { filename })).code
6869
: source;
70+
contains_svelte_files = true;
6971
} else if (ext === '.ts' && file.endsWith('.d.ts')) {
7072
// TypeScript's declaration emit won't copy over the d.ts files, so we do it here
7173
out_file = file;
@@ -104,6 +106,34 @@ export async function make_package(config, cwd = process.cwd()) {
104106
}
105107

106108
pkg.exports = { ...generated, ...pkg.exports };
109+
110+
if (!pkg.svelte && contains_svelte_files) {
111+
// Several heuristics in Kit/vite-plugin-svelte to tell Vite to mark Svelte packages
112+
// rely on the "svelte" property. Vite/Rollup/Webpack plugin can all deal with it.
113+
// See https://github.com/sveltejs/kit/issues/1959 for more info and related threads.
114+
if (pkg.exports['.']) {
115+
const svelte_export =
116+
typeof pkg.exports['.'] === 'string'
117+
? pkg.exports['.']
118+
: pkg.exports['.'].import || pkg.exports['.'].default;
119+
if (svelte_export) {
120+
pkg.svelte = svelte_export;
121+
} else {
122+
console.warn(
123+
'Cannot generate a "svelte" entry point because ' +
124+
'the "." entry in "exports" is not a string. ' +
125+
'If you set it by hand, please also set one of the options as a "svelte" entry point'
126+
);
127+
}
128+
} else {
129+
console.warn(
130+
'Cannot generate a "svelte" entry point because ' +
131+
'the "." entry in "exports" is missing. ' +
132+
'Please specify one or set a "svelte" entry point yourself'
133+
);
134+
}
135+
}
136+
107137
write(path.join(cwd, config.kit.package.dir, 'package.json'), JSON.stringify(pkg, null, ' '));
108138

109139
const whitelist = fs.readdirSync(cwd).filter((file) => {

packages/kit/src/packaging/test/fixtures/emitTypes-false/expected/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
"./Test.svelte": "./Test.svelte",
99
"./Test2.svelte": "./Test2.svelte",
1010
".": "./index.js"
11-
}
11+
},
12+
"svelte": "./index.js"
1213
}

packages/kit/src/packaging/test/fixtures/exports-merge/expected/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,6 @@
1616
"./Test": "./Test.svelte",
1717
"./package.json": "./package.json"
1818
},
19-
"type": "module"
19+
"type": "module",
20+
"svelte": "./index.js"
2021
}

packages/kit/src/packaging/test/fixtures/exports-replace/expected/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
"import": "./index.js"
99
},
1010
"./package.json": "./package.json"
11-
}
11+
},
12+
"svelte": "./Test.svelte"
1213
}

packages/kit/src/packaging/test/fixtures/exports-replace/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@
77
".": {
88
"import": "./index.js"
99
}
10-
}
10+
},
11+
"svelte": "./Test.svelte"
1112
}

packages/kit/src/packaging/test/fixtures/files-exclude/expected/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
"./internal": "./internal/index.js",
99
"./Test.svelte": "./Test.svelte",
1010
".": "./index.js"
11-
}
11+
},
12+
"svelte": "./index.js"
1213
}

packages/kit/src/packaging/test/fixtures/javascript/expected/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@
1111
"./Test2.svelte": "./Test2.svelte",
1212
"./utils": "./utils.js",
1313
".": "./index.js"
14-
}
14+
},
15+
"svelte": "./index.js"
1516
}

packages/kit/src/packaging/test/fixtures/typescript/expected/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@
99
"./Test2.svelte": "./Test2.svelte",
1010
"./utils": "./utils.js",
1111
".": "./index.js"
12-
}
12+
},
13+
"svelte": "./index.js"
1314
}

0 commit comments

Comments
 (0)