Apache Superset from Scratch: Day 3 (Frontend Setup)
December 25, 2021
In Day 3, I'm going to dive into setting up the frontend. In general, I'm quite new to the frontend ecosystem, so expect lots of tangents to fill in knowledge gaps along the way!
We'll start with the Frontend section from CONTRIBUTING.MD.
The first paragraph has some helpful historical context:
Frontend assets (TypeScript, JavaScript, CSS, and images) must be compiled in order to properly display the web UI. The superset-frontend directory contains all NPM-managed frontend assets. Note that for some legacy pages there are additional frontend assets bundled with Flask-Appbuilder (e.g. jQuery and bootstrap). These are not managed by NPM and may be phased out in the future.
Node
Thankfully, I've used Node a little bit before. Let me check what version I have installed on this computer. Usually the --version flag will do the trick!
node --version
> v17.3.0
The guide recommends Node 16, but Node 17.x should be fine. Let's check the npm version next. Npm is the Node package manager:
npm --version
> 8.3.0
The guide recommends using nvm to manage different Node versions. This is helpful advice, but I don't want to prematurely optimize and add more abstraction / complexity than needed. So let's soldier on for now.
Package.json
The package.json is the Node equivalent to Python's requirements.txt file. For Superset, the package.json file lives within the superset/superset-frontend/ folder. Let's switch into that folder.
What's actually in this file? A. LOT. Let's break some of this down.
{
"name": "superset",
"version": "0.0.0dev",
"description": "Superset is a data exploration platform designed to be visual, intuitive, and interactive.",
"keywords": [
"big",
"data",
"exploratory",
"analysis",
"react",
"d3",
"airbnb",
"nerds",
"database",
"flask"
],
This line is interesting: "version": "0.0.0dev". I wonder if this is where the Superset version value that's shown in the Superset UI lives?
As a quick detour, I wonder what this value in the package.json file in the Superset v1.4 release looks like?

My hunch was right! 1.4 is harcoded as a string in the package.json file. Cool!
Then we can run npm install, which should use the superset-frontend/package.json file. But the documentation suggests npm ci. Searching online suggests using npm ci if there's an existing package-lock.json file.
Because the project has an existing package-lock.json file, let's use npm ci!

In the first half of the CLI output, I see that npm installed 5009 packages and displayed a bunch of deprecation warnings.

In the second half of the CLI output, I see that there are 111 vulnerabilities. I'm noting both of these down (through this post!) to investigate later.
Build Frontend Assets
Next, as the guide suggests, I will run npm run build. After a few minutes, I was presented with many warnings but some indication that the build succeeded?

Next, we can start the dev server at port 9000 by running:
npm run dev-server
Here's what the CLI output looks like with both the frontend and backend runinng simultaneously:

Exciting! Now if I head to localhost:8088, I should see Superset:

Hmm, that's curious. I'm logged in as the admin and I'm still seeing issues.
Unfortunately I'm out of time for today, so I'll have to debug this on Day 4!