Frontend build fixes (#191)
* copy specific files * replace api host env var * remove unused dotenv * Update frontend/webpack.dev.js Co-authored-by: Ilya Kreymer <ikreymer@users.noreply.github.com>
This commit is contained in:
parent
4190e40964
commit
6fabea3e7a
@ -1,2 +0,0 @@
|
|||||||
API_BASE_URL=https://btrix.webrecorder.net/api
|
|
||||||
GLITCHTIP_DSN=
|
|
@ -8,7 +8,13 @@ WORKDIR /app
|
|||||||
COPY package.json .
|
COPY package.json .
|
||||||
COPY yarn.lock .
|
COPY yarn.lock .
|
||||||
RUN yarn --frozen-lockfile
|
RUN yarn --frozen-lockfile
|
||||||
COPY *.* ./
|
|
||||||
|
COPY lit-localize.json ./
|
||||||
|
COPY postcss.config.js ./
|
||||||
|
COPY tailwind.config.js ./
|
||||||
|
COPY tsconfig.json ./
|
||||||
|
COPY webpack.config.js ./
|
||||||
|
COPY webpack.prod.js ./
|
||||||
COPY src ./src/
|
COPY src ./src/
|
||||||
|
|
||||||
ARG GIT_COMMIT_HASH
|
ARG GIT_COMMIT_HASH
|
||||||
|
@ -2,16 +2,22 @@
|
|||||||
|
|
||||||
## Quickstart
|
## Quickstart
|
||||||
|
|
||||||
|
Install dependencies:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
yarn
|
||||||
|
```
|
||||||
|
|
||||||
Copy environment variables from the sample file:
|
Copy environment variables from the sample file:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
cp sample.env.local .env.local
|
cp sample.env.local .env.local
|
||||||
```
|
```
|
||||||
|
|
||||||
Install dependencies:
|
Update `API_BASE_URL` in `.env.local` to point to your dev backend API. For example:
|
||||||
|
|
||||||
```sh
|
```
|
||||||
yarn
|
API_BASE_URL=http://dev.example.com/api
|
||||||
```
|
```
|
||||||
|
|
||||||
Start the dev server:
|
Start the dev server:
|
||||||
@ -27,16 +33,16 @@ follow instructions for deploying to a local Docker instance. Update `API_BASE_U
|
|||||||
|
|
||||||
## Scripts
|
## Scripts
|
||||||
|
|
||||||
| `yarn <name>` | |
|
| `yarn <name>` | |
|
||||||
| ------------------ | ------------------------------------------------------------------- |
|
| ------------------ | --------------------------------------------------------------- |
|
||||||
| `start` | runs app in development server, reloading on file changes |
|
| `start` | runs app in development server, reloading on file changes |
|
||||||
| `test` | runs tests in chromium with playwright |
|
| `test` | runs tests in chromium with playwright |
|
||||||
| `build-dev` | bundles app and outputs it in `dist` directory |
|
| `build-dev` | bundles app and outputs it in `dist` directory |
|
||||||
| `build` | bundles app, optimized for production, and outputs it to `dist` |
|
| `build` | bundles app, optimized for production, and outputs it to `dist` |
|
||||||
| `lint` | find and fix auto-fixable javascript errors |
|
| `lint` | find and fix auto-fixable javascript errors |
|
||||||
| `format` | formats js, html and css files |
|
| `format` | formats js, html and css files |
|
||||||
| `localize:extract` | generate XLIFF file to be translated |
|
| `localize:extract` | generate XLIFF file to be translated |
|
||||||
| `localize:build` | output a localized version of strings/templates |
|
| `localize:build` | output a localized version of strings/templates |
|
||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
"prebuild": "del-cli ./dist",
|
"prebuild": "del-cli ./dist",
|
||||||
"build": "webpack --config webpack.prod.js",
|
"build": "webpack --config webpack.prod.js",
|
||||||
"build-dev": "webpack --mode development",
|
"build-dev": "webpack --mode development",
|
||||||
"start": "webpack serve --mode=development",
|
"start": "webpack serve --mode=development --config webpack.dev.js",
|
||||||
"lint": "eslint --fix \"src/**/*.{ts,js}\"",
|
"lint": "eslint --fix \"src/**/*.{ts,js}\"",
|
||||||
"format": "prettier --write \"**/*.{ts,js,html,css}\"",
|
"format": "prettier --write \"**/*.{ts,js,html,css}\"",
|
||||||
"localize:extract": "lit-localize extract",
|
"localize:extract": "lit-localize extract",
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
API_BASE_URL=https://btrix-dev.webrecorder.net/api
|
API_BASE_URL=
|
||||||
GLITCHTIP_DSN=
|
GLITCHTIP_DSN=
|
@ -233,7 +233,7 @@ export class Screencast extends LitElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const baseURL = `${window.location.protocol === "https:" ? "wss" : "ws"}:${
|
const baseURL = `${window.location.protocol === "https:" ? "wss" : "ws"}:${
|
||||||
process.env.API_HOST
|
process.env.WEBSOCKET_HOST || window.location.host
|
||||||
}/watch/${this.archiveId}/${this.crawlId}`;
|
}/watch/${this.archiveId}/${this.crawlId}`;
|
||||||
|
|
||||||
this.watchIPs.forEach((ip: string) => {
|
this.watchIPs.forEach((ip: string) => {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
// webpack.config.js
|
// webpack.config.js
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
const webpack = require("webpack");
|
|
||||||
const ESLintPlugin = require("eslint-webpack-plugin");
|
const ESLintPlugin = require("eslint-webpack-plugin");
|
||||||
const HtmlWebpackPlugin = require("html-webpack-plugin");
|
const HtmlWebpackPlugin = require("html-webpack-plugin");
|
||||||
const CopyPlugin = require("copy-webpack-plugin");
|
const CopyPlugin = require("copy-webpack-plugin");
|
||||||
@ -11,10 +10,6 @@ const isDevServer = process.env.WEBPACK_SERVE;
|
|||||||
// for testing: for prod, the Dockerfile should have the official prod version used
|
// for testing: for prod, the Dockerfile should have the official prod version used
|
||||||
const RWP_BASE_URL = process.env.RWP_BASE_URL || "https://replayweb.page/";
|
const RWP_BASE_URL = process.env.RWP_BASE_URL || "https://replayweb.page/";
|
||||||
|
|
||||||
const dotEnvPath = path.resolve(
|
|
||||||
process.cwd(),
|
|
||||||
`.env${isDevServer ? `.local` : ""}`
|
|
||||||
);
|
|
||||||
// Get git info to use as Glitchtip release version
|
// Get git info to use as Glitchtip release version
|
||||||
|
|
||||||
const execCommand = (cmd, defValue) => {
|
const execCommand = (cmd, defValue) => {
|
||||||
@ -35,13 +30,14 @@ const commitHash =
|
|||||||
process.env.GIT_COMMIT_HASH ||
|
process.env.GIT_COMMIT_HASH ||
|
||||||
execCommand("git rev-parse --short HEAD", "unknown");
|
execCommand("git rev-parse --short HEAD", "unknown");
|
||||||
|
|
||||||
|
const dotEnvPath = path.resolve(
|
||||||
|
process.cwd(),
|
||||||
|
`.env${isDevServer ? `.local` : ""}`
|
||||||
|
);
|
||||||
require("dotenv").config({
|
require("dotenv").config({
|
||||||
path: dotEnvPath,
|
path: dotEnvPath,
|
||||||
});
|
});
|
||||||
|
|
||||||
const backendUrl = new URL(
|
|
||||||
process.env.API_BASE_URL || "https://btrix.webrecorder.net/"
|
|
||||||
);
|
|
||||||
const shoelaceAssetsSrcPath = path.resolve(
|
const shoelaceAssetsSrcPath = path.resolve(
|
||||||
__dirname,
|
__dirname,
|
||||||
"node_modules/@shoelace-style/shoelace/dist/assets"
|
"node_modules/@shoelace-style/shoelace/dist/assets"
|
||||||
@ -84,48 +80,7 @@ module.exports = {
|
|||||||
extensions: [".ts", ".js"],
|
extensions: [".ts", ".js"],
|
||||||
},
|
},
|
||||||
|
|
||||||
devServer: {
|
|
||||||
watchFiles: ["src/*.js"],
|
|
||||||
open: true,
|
|
||||||
compress: true,
|
|
||||||
hot: true,
|
|
||||||
static: [
|
|
||||||
{
|
|
||||||
directory: shoelaceAssetsSrcPath,
|
|
||||||
publicPath: "/" + shoelaceAssetsPublicPath,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
directory: path.join(__dirname),
|
|
||||||
//publicPath: "/",
|
|
||||||
watch: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
historyApiFallback: true,
|
|
||||||
proxy: {
|
|
||||||
"/api": {
|
|
||||||
target: backendUrl.href,
|
|
||||||
headers: {
|
|
||||||
Host: backendUrl.host,
|
|
||||||
},
|
|
||||||
pathRewrite: { "^/api": "" },
|
|
||||||
ws: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
// Serve replay service worker file
|
|
||||||
onBeforeSetupMiddleware: (server) => {
|
|
||||||
server.app.get("/replay/sw.js", (req, res) => {
|
|
||||||
res.set("Content-Type", "application/javascript");
|
|
||||||
res.send(`importScripts("${RWP_BASE_URL}sw.js")`);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
port: 9870,
|
|
||||||
},
|
|
||||||
|
|
||||||
plugins: [
|
plugins: [
|
||||||
new webpack.DefinePlugin({
|
|
||||||
"process.env.API_HOST": JSON.stringify(backendUrl.host),
|
|
||||||
}),
|
|
||||||
|
|
||||||
new HtmlWebpackPlugin({
|
new HtmlWebpackPlugin({
|
||||||
template: "src/index.ejs",
|
template: "src/index.ejs",
|
||||||
templateParameters: {
|
templateParameters: {
|
||||||
|
64
frontend/webpack.dev.js
Normal file
64
frontend/webpack.dev.js
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
const path = require("path");
|
||||||
|
const webpack = require("webpack");
|
||||||
|
const { merge } = require("webpack-merge");
|
||||||
|
|
||||||
|
const common = require("./webpack.config.js");
|
||||||
|
|
||||||
|
// for testing: for prod, the Dockerfile should have the official prod version used
|
||||||
|
const RWP_BASE_URL = process.env.RWP_BASE_URL || "https://replayweb.page/";
|
||||||
|
|
||||||
|
if (!process.env.API_BASE_URL) {
|
||||||
|
throw new Error("To run a dev frontend server, please set the API_BASE_URL pointing to your backend api server in '.env.local'")
|
||||||
|
}
|
||||||
|
|
||||||
|
const devBackendUrl = new URL(process.env.API_BASE_URL);
|
||||||
|
const shoelaceAssetsSrcPath = path.resolve(
|
||||||
|
__dirname,
|
||||||
|
"node_modules/@shoelace-style/shoelace/dist/assets"
|
||||||
|
);
|
||||||
|
const shoelaceAssetsPublicPath = "shoelace/assets";
|
||||||
|
|
||||||
|
module.exports = merge(common, {
|
||||||
|
devServer: {
|
||||||
|
watchFiles: ["src/*.js"],
|
||||||
|
open: true,
|
||||||
|
compress: true,
|
||||||
|
hot: true,
|
||||||
|
static: [
|
||||||
|
{
|
||||||
|
directory: shoelaceAssetsSrcPath,
|
||||||
|
publicPath: "/" + shoelaceAssetsPublicPath,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
directory: path.join(__dirname),
|
||||||
|
//publicPath: "/",
|
||||||
|
watch: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
historyApiFallback: true,
|
||||||
|
proxy: {
|
||||||
|
"/api": {
|
||||||
|
target: devBackendUrl.href,
|
||||||
|
headers: {
|
||||||
|
Host: devBackendUrl.host,
|
||||||
|
},
|
||||||
|
pathRewrite: { "^/api": "" },
|
||||||
|
ws: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// Serve replay service worker file
|
||||||
|
onBeforeSetupMiddleware: (server) => {
|
||||||
|
server.app.get("/replay/sw.js", (req, res) => {
|
||||||
|
res.set("Content-Type", "application/javascript");
|
||||||
|
res.send(`importScripts("${RWP_BASE_URL}sw.js")`);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
port: 9870,
|
||||||
|
},
|
||||||
|
|
||||||
|
plugins: [
|
||||||
|
new webpack.DefinePlugin({
|
||||||
|
"process.env.WEBSOCKET_HOST": JSON.stringify(devBackendUrl.host),
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user