Mobile Wiki is an application built on top of Ember and Ember FastBoot. This combination allows us serve server side rendered application to end client (The same code is executed on frontend and backend).
To begin your journey with Mobile Wiki all you need to do is:
- On devboxes, the repo is already downloaded.
cd /usr/wikia/mobile-wiki
- Use
npm run setup
- Use
npm run dev
- Start developing
It's recommended to host mobile-wiki application on your devbox machine (make sure mobileWikiDev
role is enabled). This setup solves many problems like dependencies, cross-domain scripting, etc.
Development on local machine isn't tested. If you make that happen, please add "how to" here.
More available scripts are listed here
Open http://muppet.yourname.wikia-dev.pl/wiki/Kermit from mobile device or while emulating it in desktop browser.
Or use curl -H "Host:muppet.yourname.wikia-dev.pl" "http://dev-yourname:7001/wiki/Kermit"
npm run setup
- install all dependenciesnpm run build
- build files for dev environmentnpm run build-prod
- build files for prod environmentnpm run fastboot-server
- run built application (requires application to be build first)npm run dev
- build, run application and watch filesnpm run test
- run testsnpm run linter
- run ESLint on files that are outside ember projectnpm run stylelint
- run stylelint against all .scss in style foldernpm run stylelint -- --fix
- run stylelint and fix all issues that can be automatically fixednpm run clean
- remove all dependencies and build directorynpm run svgo
- optimize all SVG files in the repository (check outtasks/optimize-svg.sh
for details and configuration)- (Experimental)
npm run fastboot-debug
- build and run application in debugging mode. Server side code can be interrupted by debuggers.
Mobile Wiki application currently supports three types of configuration.
- Ember & FastBoot configuration computed at build time
config/environment.js
- Ember & FastBoot runtime configuration
app/instance-initializers/config.js
which has access to environment variables - Express server configuration (middleware in front of FastBoot server)
config/fastboot-server.js
Some tips if you develop outside of devbox:
- The devboxDomain must have your devbox name (without the dev- prefix) in it
- If you want to test with consul, use
mediawikiDomain: 'consul.service.sjc-dev.consul'
ormediawikiDomain: 'consul.service.poz-dev.consul'
- Check if code is executed on server side: inject fastboot service
fastboot: Ember.inject.service()
andthis.get('fastboot.isFastBoot')
- Require node package: Whitelist package in
package.json
andconst proc = FastBoot.require('proc')
- Read request headers:
this.get('fastboot.request.headers')
- Set response headers:
this.get('fastboot.request.headers').set('x-header', 'value')
- more on https://ember-fastboot.com/docs/user-guide
npm run lint:js
npm run lint:js -- --fix
To improve frontend performance we avoid making the same requests on backend and frontend. Shoebox helps us passing data from server to browser. Shoebox serilize data to JSON and puts it as script tag in HTML. In the browser shoebox reads data from HTML and uses it in Ember application.
const shoebox = this.get('fastboot.shoebox');
let data;
if (this.get('fastboot.isFastBoot')) {
data = this.get('model').fetchData();
shoebox.put('unique-key', data);
} else {
data = shoebox.retrieve('unique-key');
}
// use your data
Mobile-wiki is deployed to sandboxes using the mobile-wiki-deploy-sandbox jenkins job.
If you're in the #iris-tech channel, you can also make use of sandbot
which is a chat bot with the following commands:
sandbot status
- current statussandbot taking <name of sandbox>
to reserve onesandbot releasing <name-of sandbox>
to release one