Cordova – Setting Up to Use Aurelia

We have looked at setting up Cordova and building and running on Android in Cordova – Intro and Cordova – Build Android lets take a look at how to use a single page application framework like Aurelia.

Setup

First we will need to create a new Cordova project like we did in Cordova – Intro. Once you have your new project we will need to initalize npm so we can keep track of our packages, so run npm init and proceed through the prompts. Since we are doping our npm stuff now lets also install jspm, gulp and gulp-shell, we will use these in a bit.

Ruh-Roh Shaggy

While trying to get Aurelia, or more specifically the system.js module loader that jspm uses, to load modules properly. One idea I had was to create a new package.json that lives in the www folder and install jspm there. There are a few reasons I don’t want to install jspm in the www folder:

  • I don’t want to deploy the jspm_packages folder with the app since the size on disk tends to get rather large.
  • When I bundle the app it wont make any sense if the jspm_packages is still in the www folder.
  • I only want one package.json to track all my modules.

Well Shoot Now What?

What if instead of trying to configure jspm to install from the root and deploy from the www folder and not have issues once deployed to the device we install jspm like it was going to run from the root directory and just copy the necessary parts to the www folder? If only there was a way to automate this process so it occurrs when I edit a file. Now you may be thinking the answer to this was Gulp… and you’d be right.

gulpfile

To make this work I created a gulpfile that basically has two tasks, to copy the config.js file from the root of the directory to the www directory and to copy the jspm_packages folder to the www directory.

gulpfile.js

var gulp = require('gulp');

var dest = 'www/';

gulp.task('copy-config', () => {  
    return gulp.src('config.js')
        .pipe(gulp.dest(dest))
});

gulp.task('copy-jspm', () => {  
    return gulp.src('jspm_packages/**/*', { base: 'jspm_packages/' })
        .pipe(gulp.dest(dest + 'jspm_packages/'))
});

gulp.task('watch', () => {  
    gulp.watch(['config.js'], ['copy-config']);
    gulp.watch(['jspm_packages/**/*'], ['copy-jspm']);

});

I also added a watch but once you get your project started you may not need that running since you all the files you will be changing are already in the www folder unless you are adding new modules through jspm.

Build Your App

Now you can build your app as you would normally. You will need to add the 'unsafe-inline' to your Content-Security-Policy meta tag if you plan on using the inline script tags to load Aurelia-Bootstrapper but otherwise you should be ready to build out your Aurelia application.

Conclusion

It’s not fancy but it works. I’m sure there is a way to get the desired results of not copying all of the files from the jspm_modules into the www folder but hey, you can now start to build out your app and worry about that another time. Have a suggestion? I would like to hear it, leave a comment below or send an email to me at brett@wipdeveloper.com.

Leave a Reply