Thanks to visit codestin.com
Credit goes to github.com

Skip to content

refactor: Migrate from Next.js to pure webpack config #360

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 72 commits into from
Mar 12, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
f87c03e
Remove nextJS as dependency
bryphe-coder Feb 24, 2022
d767aa8
Next js config -> webpack config
bryphe-coder Feb 24, 2022
e1dbec2
Migrate next/link -> react-router-dom Link
bryphe-coder Feb 24, 2022
6f65f1b
Migrate routing to react-router-dom style; get webpack building
bryphe-coder Feb 24, 2022
69010f8
Hook up workspaces route
bryphe-coder Feb 25, 2022
7800a4e
First round of clean-up
bryphe-coder Feb 25, 2022
7158d75
Get SignInForm tests green
bryphe-coder Feb 25, 2022
a58a29d
Get additional tests green
bryphe-coder Feb 25, 2022
bc83df6
Get tests green again
bryphe-coder Feb 25, 2022
3c5895c
HMR / live reload updates from FE variety
bryphe-coder Feb 25, 2022
b657fe6
Remove export from Makefile temporarily
bryphe-coder Feb 25, 2022
75a38d9
Remove export command
bryphe-coder Feb 25, 2022
e4fe1ed
Convert webpack config to typescript
bryphe-coder Feb 25, 2022
d9e9d2d
Split out dev vs prod webpack configs
bryphe-coder Feb 25, 2022
02838a2
Remove nextrouter, port over some functionality to embed
bryphe-coder Feb 25, 2022
d8c983f
Implement content-addressable (and cache-friendly) bundle name
bryphe-coder Feb 26, 2022
396be38
Start setting up new post-nextrouter routing strategy
bryphe-coder Feb 26, 2022
87be7aa
Fix production webpack config
bryphe-coder Feb 26, 2022
3e1d008
Remove _document
bryphe-coder Feb 26, 2022
d1566d3
Remove nested GITKEEP
bryphe-coder Feb 26, 2022
bdd966b
Copy static files over
bryphe-coder Feb 26, 2022
ac064ca
Fix up dependencies
bryphe-coder Feb 26, 2022
c0ca05c
Clean-up
bryphe-coder Feb 26, 2022
b85dcf1
Merge main
bryphe-coder Mar 2, 2022
3a724e4
Merge main
bryphe-coder Mar 8, 2022
40a4e69
Use same entry point as v1
bryphe-coder Mar 8, 2022
7f10110
Initial lint fix
bryphe-coder Mar 8, 2022
a5a09d5
Move index.html -> html_templates
bryphe-coder Mar 8, 2022
5af2c20
Merge branch 'main' into bryphe/experiment/nextjs-to-webpack
bryphe-coder Mar 8, 2022
3898544
Implement 404 page
bryphe-coder Mar 8, 2022
cd07056
Add test case for caching
bryphe-coder Mar 9, 2022
78051ff
Remove now-unused function
bryphe-coder Mar 9, 2022
cf8b4e0
Add plumbing to make CSRF token testable
bryphe-coder Mar 9, 2022
8bd5804
Fix todos
bryphe-coder Mar 9, 2022
427672b
Additional test cases
bryphe-coder Mar 9, 2022
929a3b7
Remove now unnecessary test
bryphe-coder Mar 9, 2022
f822347
Add test + fix template parameters
bryphe-coder Mar 9, 2022
6c00822
Fix up go lint cases
bryphe-coder Mar 9, 2022
12b0e1d
Remove commented and now-unnecessary export step
bryphe-coder Mar 9, 2022
b348b70
Fix Handler -> DefaultHandler
bryphe-coder Mar 9, 2022
07f52d5
Fix remaining lint issues
bryphe-coder Mar 9, 2022
095bcfc
Add webpack-bundle-analyzer + command to run server
bryphe-coder Mar 9, 2022
7b5e982
Better document the webpack files to match the work Grey is doing in v1
bryphe-coder Mar 9, 2022
a3f31c9
Update webpack configs
bryphe-coder Mar 9, 2022
4134392
Port over fileoverview comments
bryphe-coder Mar 9, 2022
90f04ab
Remove accidental addition of test collateral
bryphe-coder Mar 10, 2022
6ffd38b
Use <Navigate> component from react-router-dom instead of custom <Red…
bryphe-coder Mar 10, 2022
7a50bc1
Merge main
bryphe-coder Mar 11, 2022
b4a18e0
Fix lint issues
bryphe-coder Mar 11, 2022
244e305
Remove build:dev to match v1 suite of webpack build commands
bryphe-coder Mar 11, 2022
e65f5af
Remove dev.ts and several references in jest/tsconfig
bryphe-coder Mar 11, 2022
19509bc
Fix copy-paste error with the NotFoundPage
bryphe-coder Mar 11, 2022
f4f7cb3
Add descriptive comment for SWR fetching
bryphe-coder Mar 11, 2022
37295ce
Remove unnecessary inline styles
bryphe-coder Mar 11, 2022
02a8718
Remove custom title in HTMLWebpackPlugin
bryphe-coder Mar 11, 2022
6e168a8
Use default settings for HtmlWebpackPlugin for script injection
bryphe-coder Mar 11, 2022
1a600d1
Remove 'noEmit' flag from tsconfig
bryphe-coder Mar 11, 2022
cab30cd
Remove dev.ts from tsconfig.test.json
bryphe-coder Mar 11, 2022
b725cf8
Format jest file
bryphe-coder Mar 11, 2022
71d076d
Use bundle name as-is for development
bryphe-coder Mar 11, 2022
818fc74
Factor to v1 strategy; get tests passing
bryphe-coder Mar 11, 2022
b61d39e
Fix go lint issues
bryphe-coder Mar 11, 2022
8b67328
Add missed meta tag
bryphe-coder Mar 11, 2022
2a183ce
Port over publicPath, needed for the v1 embed strategy
bryphe-coder Mar 11, 2022
037489f
Fix up formatting
bryphe-coder Mar 11, 2022
0b81ab8
Fix compilation error
bryphe-coder Mar 12, 2022
0839201
Update comment
bryphe-coder Mar 12, 2022
685b8f1
Add progress to build:analyze command
bryphe-coder Mar 12, 2022
807ac3b
Tweak comment
bryphe-coder Mar 12, 2022
2d47d8c
Add more logs to playwright
bryphe-coder Mar 12, 2022
861592a
Port over our playwright utilities for client-side nav
bryphe-coder Mar 12, 2022
c31f594
Merge branch 'main' into bryphe/experiment/nextjs-to-webpack
bryphe-coder Mar 12, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Better document the webpack files to match the work Grey is doing in v1
  • Loading branch information
bryphe-coder committed Mar 9, 2022
commit 7b5e982a0d7de7539b2ec134f5db59604c1599b2
57 changes: 57 additions & 0 deletions site/webpack.common.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/**
* @fileoverview This file contains a set of webpack configurations that should
* be shared between development and production.
*/


import * as path from "path"
import { Configuration } from "webpack"
import HtmlWebpackPlugin from "html-webpack-plugin"

const templatePath = path.join(__dirname, "html_templates")

const plugins = [
// The HTML webpack plugin tells webpack to use our `index.html` and inject
// the bundle script, which might have special naming.
new HtmlWebpackPlugin({
title: "Custom template",
template: path.join(templatePath, "index.html"),
inject: "body",
})
]

export const commonWebpackConfig: Configuration = {
// entry defines each "page" or "chunk". Currently, for v2, we only have one bundle -
// a bundle that is shared across all of the UI. However, we may need to eventually split
// like in v1, where there is a separate entry piont for dashboard & terminal.
entry: path.join(__dirname, "Main.tsx"),

// modules specify how different modules are loaded
// See: https://webpack.js.org/concepts/modules/
module: {
rules: [
{
test: /\.tsx?$/,
use: ["ts-loader"],
exclude: [/node_modules/],
},
],
},

resolve: {
// Let webpack know to consider ts/tsx files for bundling
// See: https://webpack.js.org/guides/typescript/
extensions: [".tsx", ".ts", ".js"]
},

// output defines the name and location of the final bundle
output: {
// The chunk name along with a hash of its content will be used for the
// generated bundle name.
//
// REMARK: It's important to use [contenthash] here to invalidate caches.
filename: "bundle.[contenthash].js",
path: path.resolve(__dirname, "out"),
},
target: "web",
}
51 changes: 38 additions & 13 deletions site/webpack.dev.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,39 @@
import ReactRefreshWebpackPlugin from "@pmmmwh/react-refresh-webpack-plugin"
import HtmlWebpackPlugin from "html-webpack-plugin"
import * as webpack from "webpack"
import { Configuration } from "webpack"
import "webpack-dev-server"

import productionConfig from "./webpack.prod"
import { commonWebpackConfig } from "./webpack.common"

const config: webpack.Configuration = {
...productionConfig,
const commonPlugins = commonWebpackConfig.plugins || []

const config: Configuration = {
...commonWebpackConfig,

// devtool controls how source maps are generated. In development, we want
// more details (less optimized) for more readability and an easier time
// debugging
devtool: "eval-source-map",

// devServer is the configuration for webpack-dev-server.
//
// REMARK: needs webpack-dev-server import at top of file for typings
devServer: {
allowedHosts: "all",

// client configures options that are observed in the browser/web-client.
client: {
// automatically sets the browser console to verbose when using HMR
logging: "verbose",

// errors will display as a full-screen overlay
overlay: true,
progress: false,

// build % progress will display in the browser
progress: true,

// webpack-dev-server uses a webSocket to communicate with the browser
// for HMR. By setting this to auto://0.0.0.0/ws, we allow the browser
// to set the protocal, hostname and port automatically for us.
webSocketURL: "auto://0.0.0.0:0/ws",
},
devMiddleware: {
Expand All @@ -20,22 +42,25 @@ const config: webpack.Configuration = {
headers: {
"Access-Control-Allow-Origin": "*",
},

// historyApiFallback is required when using history (react-router) for
// properly serving index.html on 404s.
historyApiFallback: true,
hot: true,
proxy: {
"/api": "http://localhost:3000",
},
static: ["./static"],
},

// Development mode - see:
// https://webpack.js.org/configuration/mode/#mode-development
mode: "development",
plugins: [
new HtmlWebpackPlugin({
title: "Custom template",
// Load a custom template (lodash by default)
template: "html_templates/index.html",
inject: "body",
hash: true,
}),
...commonPlugins,

// The ReactRefreshWebpackPlugin enables hot-module reloading:
// https://github.com/pmmmwh/react-refresh-webpack-plugin
new ReactRefreshWebpackPlugin({
overlay: true,
}),
Expand Down
51 changes: 21 additions & 30 deletions site/webpack.prod.ts
Original file line number Diff line number Diff line change
@@ -1,40 +1,31 @@
import * as path from "path"
import CopyWebpackPlugin from "copy-webpack-plugin"
import HtmlWebpackPlugin from "html-webpack-plugin"
import * as webpack from "webpack"
import "webpack-dev-server"
import { Configuration } from "webpack"
import { commonWebpackConfig } from "./webpack.common"

const config: webpack.Configuration = {
entry: "./Main.tsx",
const commonPlugins = commonWebpackConfig.plugins || []

export const config: Configuration = {
...commonWebpackConfig,
mode: "production",
module: {
rules: [
{
test: /\.tsx?$/,
use: ["ts-loader"],
exclude: [/node_modules/],
},
],

// Don't produce sourcemaps in production, to minmize bundle size
devtool: false,

output: {
...commonWebpackConfig.output,

// regenerate the entire out/ directory when producing production builds
clean: true,
},

plugins: [
...commonPlugins,
// For production builds, we also need to copy all the static
// files to the 'out' folder.
new CopyWebpackPlugin({
patterns: [{ from: "static", to: "." }],
}),
new HtmlWebpackPlugin({
title: "Custom template",
// Load a custom template (lodash by default)
template: "html_templates/index.html",
inject: "body",
}),
],
resolve: {
extensions: [".tsx", ".ts", ".js"],
},
output: {
filename: "bundle.[contenthash].js",
path: path.resolve(__dirname, "out"),
},
target: "web",
})
]
}

export default config