2016-02-24 18:58:37 +03:00
|
|
|
|
|
|
|
[![Build Status](https://travis-ci.org/mozilla/addons-frontend.svg?branch=master)](https://travis-ci.org/mozilla/addons-frontend)
|
2016-03-02 22:22:45 +03:00
|
|
|
[![Coverage Status](https://coveralls.io/repos/github/mozilla/addons-frontend/badge.svg?branch=master)](https://coveralls.io/github/mozilla/addons-frontend?branch=master)
|
2016-02-24 18:58:37 +03:00
|
|
|
|
2016-06-01 22:06:12 +03:00
|
|
|
[Documentation](http://addons-frontend.readthedocs.io/en/latest/)
|
|
|
|
|
2016-02-22 21:53:09 +03:00
|
|
|
# Addons-frontend 🔥
|
2016-02-19 21:00:53 +03:00
|
|
|
|
2016-06-21 19:11:07 +03:00
|
|
|
Front-end infrastructure and code to complement
|
|
|
|
[mozilla/addons-server](https://github.com/mozilla/addons-server).
|
2016-02-19 21:00:53 +03:00
|
|
|
|
2016-02-22 21:53:09 +03:00
|
|
|
## Requirements
|
|
|
|
|
|
|
|
* Node 4.x LTS
|
|
|
|
* npm 3.x
|
|
|
|
|
|
|
|
The easiest way to manage multiple node versions in development is to use
|
2016-07-22 20:24:06 +03:00
|
|
|
[nvm](https://github.com/creationix/nvm).
|
2016-02-22 21:53:09 +03:00
|
|
|
|
2016-02-23 19:01:58 +03:00
|
|
|
## Get started
|
|
|
|
|
|
|
|
* npm install
|
|
|
|
* npm run dev
|
|
|
|
|
2016-02-24 14:26:46 +03:00
|
|
|
|
2016-07-05 20:54:08 +03:00
|
|
|
## NPM scripts for development
|
|
|
|
|
|
|
|
Generic scripts that don't need env vars. Use these for development:
|
2016-02-24 14:26:46 +03:00
|
|
|
|
2016-05-20 01:33:30 +03:00
|
|
|
| Script | Description |
|
|
|
|
|------------------------|-----------------------------------------------------|
|
2016-07-11 15:04:15 +03:00
|
|
|
| npm run dev:amo | Starts the dev server (amo) |
|
2016-05-20 01:33:30 +03:00
|
|
|
| npm run dev:disco | Starts the dev server (discovery pane) |
|
2016-07-11 15:04:15 +03:00
|
|
|
| npm run dev:search | Starts the dev server (search app) |
|
2016-07-05 20:54:08 +03:00
|
|
|
| npm run eslint | Lints the JS |
|
|
|
|
| npm run stylelint | Lints the SCSS |
|
|
|
|
| npm run lint | Runs all the JS + SCSS linters |
|
2016-05-20 01:33:30 +03:00
|
|
|
| npm run version-check | Checks you have the minimum node + npm versions |
|
2016-07-05 20:54:08 +03:00
|
|
|
| npm test | Runs the unittest, servertests + lint |
|
|
|
|
| npm run unittest | Runs just the unittests |
|
|
|
|
| npm run unittest:dev | Runs the unittests and watches for changes |
|
|
|
|
| npm run servertest | Runs the servertests |
|
|
|
|
|
2016-07-25 19:27:40 +03:00
|
|
|
### Code coverage
|
|
|
|
|
|
|
|
The `npm run unittest` command generates a report of how well the unit tests
|
|
|
|
covered each line of source code.
|
|
|
|
The continuous integration process will give you a link to view the report.
|
|
|
|
To see this report while running tests locally, type:
|
|
|
|
|
|
|
|
open ./coverage/index.html
|
|
|
|
|
2016-07-22 20:24:06 +03:00
|
|
|
### Configuring for local development
|
|
|
|
|
|
|
|
The `dev` scripts above will connect to a hosted development API by default.
|
|
|
|
If you want to run your own
|
|
|
|
[addons-server](https://github.com/mozilla/addons-server)
|
|
|
|
API or make any other local changes, just add a local configuration
|
|
|
|
file for each app. For example, to run your own discovery pane API, first create
|
|
|
|
a local config file:
|
|
|
|
|
2016-07-28 18:19:51 +03:00
|
|
|
touch config/local-development-disco.js
|
2016-07-22 20:24:06 +03:00
|
|
|
|
2016-07-28 18:19:51 +03:00
|
|
|
Be sure to prefix the file with **local-development-** so that it doesn't pollute the
|
|
|
|
test suite.
|
|
|
|
Here's what `local-development-disco.js` would look like when
|
|
|
|
overriding the `apiHost` parameter so that it points to your docker container:
|
2016-07-22 20:24:06 +03:00
|
|
|
|
|
|
|
````javascript
|
|
|
|
module.exports = {
|
|
|
|
apiHost: 'http://olympia.dev',
|
|
|
|
};
|
|
|
|
````
|
|
|
|
|
|
|
|
When you start up your front-end discover pane server, it will now apply
|
|
|
|
overrides from your local configuration file:
|
|
|
|
|
|
|
|
npm run dev:disco
|
|
|
|
|
2016-07-28 18:19:51 +03:00
|
|
|
Consult the
|
|
|
|
[config file loading order docs](https://github.com/lorenwest/node-config/wiki/Configuration-Files#file-load-order)
|
|
|
|
to learn more about how configuration is applied.
|
|
|
|
|
2016-07-05 20:54:08 +03:00
|
|
|
### Building and running services
|
|
|
|
|
|
|
|
The following are scripts that are used in deployment - you generally won't
|
|
|
|
need unless you're testing something related to deployment or builds.
|
2016-04-15 22:29:27 +03:00
|
|
|
|
2016-07-05 20:54:08 +03:00
|
|
|
The env vars are:
|
2016-04-15 22:29:27 +03:00
|
|
|
|
2016-07-05 20:54:08 +03:00
|
|
|
`NODE_APP_INSTANCE` this is the name of the app e.g. 'disco'
|
|
|
|
`NODE_ENV` this is the node environment. e.g. production, dev, stage, development.
|
|
|
|
|
|
|
|
| Script | Description |
|
|
|
|
|------------------------|-----------------------------------------------------|
|
|
|
|
| npm run start | Starts the express server (requires env vars) |
|
|
|
|
| npm run build | Builds the libs (all apps) (requires env vars) |
|
2016-04-15 22:29:27 +03:00
|
|
|
|
2016-07-05 20:54:08 +03:00
|
|
|
Example: Building and running a production instance of the search app:
|
2016-04-15 22:29:27 +03:00
|
|
|
|
|
|
|
```
|
2016-05-20 01:33:30 +03:00
|
|
|
NODE_APP_INSTANCE=search NODE_ENV=production npm run build && npm run start
|
2016-04-15 22:29:27 +03:00
|
|
|
```
|
2016-02-24 14:26:46 +03:00
|
|
|
|
2016-02-19 21:00:53 +03:00
|
|
|
## Overview and rationale
|
|
|
|
|
2016-02-22 21:53:09 +03:00
|
|
|
This project will hold several distinct front-ends e.g:
|
2016-02-19 21:00:53 +03:00
|
|
|
|
|
|
|
* Editors search tool
|
|
|
|
* Discovery Pane
|
|
|
|
* and beyond...
|
|
|
|
|
2016-02-22 21:53:09 +03:00
|
|
|
We've made a conscious decision to avoid "premature modularization" and
|
|
|
|
keep this all in one repository. This will help us build out the necessary
|
|
|
|
tooling to support a universal front-end infrastructure without having to
|
|
|
|
worry about cutting packages and bumping versions the entire time.
|
2016-02-19 21:00:53 +03:00
|
|
|
|
2016-02-22 21:53:09 +03:00
|
|
|
At a later date if we need to move things out into their own project we
|
|
|
|
still can.
|
2016-02-19 21:00:53 +03:00
|
|
|
|
|
|
|
## Core technologies
|
|
|
|
|
|
|
|
* Based on Redux + React
|
2016-02-22 21:53:09 +03:00
|
|
|
* Code written in ES2015+
|
2016-02-19 21:00:53 +03:00
|
|
|
* Universal rendering via node
|
|
|
|
* Unit tests with high coverage (aiming for 100%)
|