Skip to content

Commit 35f8e30

Browse files
committed
update template to Svelte 4
1 parent 6a88286 commit 35f8e30

File tree

3 files changed

+23
-20
lines changed

3 files changed

+23
-20
lines changed

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
"cross-env": "^7.0.3",
66
"css-loader": "^6.7.1",
77
"mini-css-extract-plugin": "^2.6.0",
8-
"svelte": "^3.55.0",
9-
"svelte-loader": "^3.1.2",
8+
"svelte": "^4.0.0",
9+
"svelte-loader": "^3.1.9",
1010
"webpack": "^5.70.0",
11-
"webpack-cli": "^4.9.2",
12-
"webpack-dev-server": "^4.7.4"
11+
"webpack-cli": "^5.1.4",
12+
"webpack-dev-server": "^4.15.1"
1313
},
1414
"scripts": {
1515
"build": "cross-env NODE_ENV=production webpack",

scripts/setupTypeScript.js

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,12 @@ function addDepsToPackageJson() {
5858
const packageJSON = JSON.parse(fs.readFileSync(pkgJSONPath, 'utf8'));
5959
packageJSON.devDependencies = Object.assign(packageJSON.devDependencies, {
6060
'ts-loader': '^9.0.0',
61-
'@tsconfig/svelte': '^3.0.0',
61+
'@tsconfig/svelte': '^4.0.0',
6262
'@types/node': '^16.0.0',
63-
'svelte-check': '^3.0.0',
64-
'svelte-preprocess': '^5.0.0',
63+
'svelte-check': '^3.4.4',
64+
'svelte-preprocess': '^5.0.4',
6565
tslib: '^2.5.0',
66-
typescript: '^4.9.0'
66+
typescript: '^5.0.0'
6767
});
6868

6969
// Add script for checking
@@ -127,12 +127,12 @@ function updateWebpackConfig() {
127127
// Add preprocess to the svelte loader, this is tricky because there's no easy signifier.
128128
// Instead we look for 'hotReload: 'prod,'
129129
[
130-
/hotReload: \!prod(?!,\n\s*preprocess)/g,
130+
/hotReload: \!prod(?!,\r?\n\s*preprocess)/g,
131131
'hotReload: !prod,\n\t\t\t\t\t\tpreprocess: sveltePreprocess({ sourceMap: !prod })'
132132
],
133133
// Add ts-loader
134134
[
135-
/module: {\n\s*rules: \[\n\s*(?!{\n\s*test: \/\\\.ts\$\/)/g,
135+
/module: {\r?\n\s*rules: \[\r?\n\s*(?!{\r?\n\s*test: \/\\\.ts\$\/)/g,
136136
`module: {\n\t\trules: [\n\t\t\t{\n\t\t\t\ttest: /\\.ts$/,\n\t\t\t\tloader: 'ts-loader',\n\t\t\t\texclude: /node_modules/\n\t\t\t},\n\t\t\t`,
137137
]
138138
]);
@@ -149,6 +149,12 @@ function createTsConfig() {
149149
createFile(path.join(projectRoot, 'tsconfig.json'), tsconfig);
150150
}
151151

152+
// Add ambient file so webpack/VS Code can pick up the Svelte ambient types
153+
function createSvelteAmbientFile() {
154+
const file = '/// <reference types="svelte" />\n';
155+
createFile(path.join(projectRoot, 'src', 'global.d.ts'), file);
156+
}
157+
152158
// Adds the extension recommendation
153159
function configureVsCode() {
154160
const dir = path.join(projectRoot, '.vscode');
@@ -192,6 +198,8 @@ updateWebpackConfig();
192198

193199
createTsConfig();
194200

201+
createSvelteAmbientFile();
202+
195203
configureVsCode();
196204

197205
// Delete this script, but not during testing

webpack.config.js

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@ module.exports = {
99
'build/bundle': ['./src/main.js']
1010
},
1111
resolve: {
12-
alias: {
13-
svelte: path.dirname(require.resolve('svelte/package.json'))
14-
},
12+
// The alias config shouldn't be needed most of the time, you only need to comment it in if you encounter weird
13+
// Svelte runtime errors that hint at multiple Svelte runtime versions being pulled in. The alias helps dedupe them.
14+
// alias: {
15+
// svelte: path.resolve('node_modules', 'svelte/src/runtime')
16+
// },
1517
extensions: ['.mjs', '.js', '.svelte'],
1618
mainFields: ['svelte', 'browser', 'module', 'main'],
1719
conditionNames: ['svelte', 'browser']
@@ -42,13 +44,6 @@ module.exports = {
4244
MiniCssExtractPlugin.loader,
4345
'css-loader'
4446
]
45-
},
46-
{
47-
// required to prevent errors from Svelte on Webpack 5+
48-
test: /node_modules\/svelte\/.*\.mjs$/,
49-
resolve: {
50-
fullySpecified: false
51-
}
5247
}
5348
]
5449
},

0 commit comments

Comments
 (0)