Skip to content

Commit 396084d

Browse files
committed
Merge remote-tracking branch 'sw/master'
* sw/master: Changed single to double quotes Serviceworker now properly loads added caching added assets to individual module folders actually fixed images i think fixed image link added deps in package.json Added serviceworker and manifest.json
2 parents 3a672d7 + 61e3a70 commit 396084d

File tree

7 files changed

+614
-208
lines changed

7 files changed

+614
-208
lines changed

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@
5050
"webpack-dev-middleware": "^3.5.0",
5151
"webpack-dev-server": "^3.1.14",
5252
"webpack-hot-middleware": "^2.24.3",
53+
"webpack-pwa-manifest": "^4.0.0",
54+
"workbox-webpack-plugin": "^4.1.0",
5355
"write-file-webpack-plugin": "^4.5.0"
5456
},
5557
"dependencies": {

packages/app/browser/assets/logo.png

27.9 KB
Loading

packages/web/assets/logo.png

27.9 KB
Loading

packages/web/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"name": "@coder/web",
3-
"scripts": {
4-
"build": "../../node_modules/.bin/cross-env UV_THREADPOOL_SIZE=100 node --max-old-space-size=32384 ../../node_modules/webpack/bin/webpack.js --config ./webpack.config.js"
5-
}
2+
"name": "@coder/web",
3+
"scripts": {
4+
"build": "../../node_modules/.bin/cross-env UV_THREADPOOL_SIZE=100 node --max-old-space-size=32384 ../../node_modules/webpack/bin/webpack.js --config ./webpack.config.js"
5+
}
66
}

packages/web/src/index.html

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,15 @@
2323
return;
2424
}
2525
document.body.style.background = bg;
26-
})();
26+
})();
27+
28+
// Check that service workers are registered
29+
if ("serviceWorker" in navigator) {
30+
// Use the window load event to keep the page load performant
31+
window.addEventListener("load", () => {
32+
navigator.serviceWorker.register("/service-worker.js");
33+
});
34+
}
2735
</script>
2836
</body>
29-
3037
</html>

scripts/webpack.client.config.js

Lines changed: 94 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -4,58 +4,103 @@ const merge = require("webpack-merge");
44
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
55
const PreloadWebpackPlugin = require("preload-webpack-plugin");
66
const HtmlWebpackPlugin = require("html-webpack-plugin");
7+
const WebpackPwaManifest = require("webpack-pwa-manifest");
8+
const { GenerateSW } = require("workbox-webpack-plugin");
9+
710
// const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer");
811

912
const root = path.join(__dirname, "..");
1013
const prod = process.env.NODE_ENV === "production" || process.env.CI === "true";
1114

1215
module.exports = (options = {}) => merge(
13-
require("./webpack.general.config")(options), {
14-
devtool: prod ? "none" : "cheap-module-eval-source-map",
15-
mode: prod ? "production" : "development",
16-
entry: prod ? options.entry : [
17-
"webpack-hot-middleware/client?reload=true&quiet=true",
18-
options.entry,
19-
],
20-
module: {
21-
rules: [{
22-
test: /\.s?css$/,
23-
// This is required otherwise it'll fail to resolve CSS in common.
24-
include: root,
25-
use: [{
26-
loader: MiniCssExtractPlugin.loader,
27-
}, {
28-
loader: "css-loader",
29-
}, {
30-
loader: "sass-loader",
31-
}],
32-
}, {
33-
test: /\.(png|ttf|woff|eot|woff2)$/,
34-
use: [{
35-
loader: "file-loader",
36-
options: {
37-
name: "[path][name].[ext]",
38-
},
39-
}],
40-
}, {
41-
test: /\.svg$/,
42-
loader: 'url-loader'
43-
}],
44-
},
45-
plugins: [
46-
new MiniCssExtractPlugin({
47-
filename: "[name].css",
48-
chunkFilename: "[id].css",
49-
}),
50-
new HtmlWebpackPlugin({
51-
template: options.template,
52-
}),
53-
new PreloadWebpackPlugin({
54-
rel: "preload",
55-
as: "script",
56-
}),
57-
].concat(prod ? [] : [
58-
new webpack.HotModuleReplacementPlugin(),
59-
]),
60-
target: "web",
61-
});
16+
require("./webpack.general.config")(options), {
17+
devtool: prod ? "none" : "cheap-module-eval-source-map",
18+
mode: prod ? "production" : "development",
19+
entry: prod ? options.entry : [
20+
"webpack-hot-middleware/client?reload=true&quiet=true",
21+
options.entry,
22+
],
23+
module: {
24+
rules: [{
25+
test: /\.s?css$/,
26+
// This is required otherwise it'll fail to resolve CSS in common.
27+
include: root,
28+
use: [{
29+
loader: MiniCssExtractPlugin.loader,
30+
}, {
31+
loader: "css-loader",
32+
}, {
33+
loader: "sass-loader",
34+
}],
35+
}, {
36+
test: /\.(png|ttf|woff|eot|woff2)$/,
37+
use: [{
38+
loader: "file-loader",
39+
options: {
40+
name: "[path][name].[ext]",
41+
},
42+
}],
43+
}, {
44+
test: /\.svg$/,
45+
loader: 'url-loader'
46+
}],
47+
},
48+
plugins: [
49+
new MiniCssExtractPlugin({
50+
filename: "[name].css",
51+
chunkFilename: "[id].css"
52+
}),
53+
new HtmlWebpackPlugin({
54+
template: options.template
55+
}),
56+
new PreloadWebpackPlugin({
57+
rel: "preload",
58+
as: "script"
59+
}),
60+
new WebpackPwaManifest({
61+
name: "Coder",
62+
short_name: "Coder",
63+
description: "Run VS Code on a remote server",
64+
background_color: "#303030",
65+
icons: [
66+
{
67+
src: path.resolve("./assets/logo.png"),
68+
sizes: [96, 128, 192, 256, 384]
69+
}
70+
]
71+
}),
72+
new GenerateSW({
73+
runtimeCaching: [
74+
{
75+
urlPattern: new RegExp(".*"),
76+
handler: "StaleWhileRevalidate",
77+
options: {
78+
cacheName: "code-server",
79+
expiration: {
80+
maxAgeSeconds: 86400
81+
},
82+
cacheableResponse: {
83+
statuses: [0, 200]
84+
}
85+
}
86+
}
87+
// Network first caching is also possible.
88+
/*{
89+
urlPattern: "",
90+
handler: "NetworkFirst",
91+
options: {
92+
networkTimeoutSeconds: 4,
93+
cacheName: "code-server",
94+
expiration: {
95+
maxAgeSeconds: 86400,
96+
},
97+
cacheableResponse: {
98+
statuses: [0, 200],
99+
},
100+
},
101+
}*/
102+
]
103+
})
104+
].concat(prod ? [] : [new webpack.HotModuleReplacementPlugin()]),
105+
target: "web"
106+
});

0 commit comments

Comments
 (0)