From 2fb83c5b6f6afeb709dfe80b6423d0a25c63de88 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Mon, 4 Nov 2013 19:32:16 +0100 Subject: [PATCH 1/5] bower remove jquery cookie & reorganize --- bower.json | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/bower.json b/bower.json index a36c93458e..d3b5229d0a 100644 --- a/bower.json +++ b/bower.json @@ -15,32 +15,31 @@ ], "dependencies": { "jquery": "~2.0.3", - "angular": "1.2.0-rc.2", - "angular-resource": "1.2.0-rc.2", + "jquery-ui": "~1.10.3", + "angular": "1.2.0-rc.3", + "angular-sanitize": "1.2.0-rc.3", "angular-ui": "~0.4.0", + "angular-ui-utils": "~0.0.4", "angular-bootstrap": "~0.5.0", - "habitrpg-shared": "git://github.com/HabitRPG/habitrpg-shared.git#master", + "angular-ui-router": "ca3b4777a603df8f86cfd653c8f6c38b2ae05d89", + "angular-loading-bar": "~0.0.5", + "bootstrap": "v2.3.2", + "bootstrap-datepicker": "~1.2.0", "bootstrap-tour": "0.5.0", + "bootstrap-growl": "~1.1.0", + "habitrpg-shared": "git://github.com/HabitRPG/habitrpg-shared.git#master", "BrowserQuest": "https://github.com/mozilla/BrowserQuest.git", "github-buttons": "git://github.com/mdo/github-buttons.git", - "jquery-ui": "~1.10.3", - "bootstrap-growl": "~1.1.0", - "jquery.cookie": "~1.3.1", "sticky": "*", - "bootstrap-datepicker": "~1.2.0", - "bootstrap": "v2.3.2", - "angular-ui-utils": "~0.0.4", - "angular-sanitize": "1.2.0-rc.2", "marked": "~0.2.9", - "JavaScriptButtons": "git://github.com/paypal/JavaScriptButtons.git#master", - "angular-ui-router": "ca3b4777a603df8f86cfd653c8f6c38b2ae05d89", - "angular-loading-bar": "~0.0.5" + "JavaScriptButtons": "git://github.com/paypal/JavaScriptButtons.git#master" }, "resolutions": { "jquery": "~2.0.3", - "bootstrap": "v2.3.2" + "bootstrap": "v2.3.2", + "angular": "1.2.0-rc.3" }, "devDependencies": { - "angular-mocks": "1.2.0-rc.2" + "angular-mocks": "1.2.0-rc.3" } } From c16fa8ccf279ec6615e33d8a99dad8f412e18b1f Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Mon, 4 Nov 2013 19:36:45 +0100 Subject: [PATCH 2/5] add restangular --- bower.json | 1 + 1 file changed, 1 insertion(+) diff --git a/bower.json b/bower.json index d3b5229d0a..7541fee82e 100644 --- a/bower.json +++ b/bower.json @@ -18,6 +18,7 @@ "jquery-ui": "~1.10.3", "angular": "1.2.0-rc.3", "angular-sanitize": "1.2.0-rc.3", + "restangular": "~1.1.6", "angular-ui": "~0.4.0", "angular-ui-utils": "~0.0.4", "angular-bootstrap": "~0.5.0", From fadce5b3bedda1a89c2d67ba8bcea37cdf304551 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Mon, 4 Nov 2013 19:45:03 +0100 Subject: [PATCH 3/5] remove sticky that is not used it seems --- bower.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/bower.json b/bower.json index 7541fee82e..79673735ad 100644 --- a/bower.json +++ b/bower.json @@ -31,14 +31,12 @@ "habitrpg-shared": "git://github.com/HabitRPG/habitrpg-shared.git#master", "BrowserQuest": "https://github.com/mozilla/BrowserQuest.git", "github-buttons": "git://github.com/mdo/github-buttons.git", - "sticky": "*", "marked": "~0.2.9", "JavaScriptButtons": "git://github.com/paypal/JavaScriptButtons.git#master" }, "resolutions": { "jquery": "~2.0.3", - "bootstrap": "v2.3.2", - "angular": "1.2.0-rc.3" + "bootstrap": "v2.3.2" }, "devDependencies": { "angular-mocks": "1.2.0-rc.3" From 54225d38f180686e9093cacd2e7475d2b2876598 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Mon, 4 Nov 2013 20:29:30 +0100 Subject: [PATCH 4/5] re-add angular-resource --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 79673735ad..31c7729886 100644 --- a/bower.json +++ b/bower.json @@ -18,7 +18,7 @@ "jquery-ui": "~1.10.3", "angular": "1.2.0-rc.3", "angular-sanitize": "1.2.0-rc.3", - "restangular": "~1.1.6", + "angular-resource": "1.2.0-rc.3", "angular-ui": "~0.4.0", "angular-ui-utils": "~0.0.4", "angular-bootstrap": "~0.5.0", From d0c29eba785d6178f00ba8f0d5d1ffa5be0b792e Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Mon, 4 Nov 2013 22:11:45 +0100 Subject: [PATCH 5/5] move js & css files to public/manifest.json, allow for stylus files editing without restarting server on development, removed hashres from dev build --- Gruntfile.js | 116 +++++++++------------------------------ public/manifest.json | 83 ++++++++++++++++++++++++++++ src/middleware.js | 31 ++++++++++- src/server.js | 4 +- views/index.jade | 71 +----------------------- views/static/layout.jade | 27 +-------- 6 files changed, 143 insertions(+), 189 deletions(-) create mode 100644 public/manifest.json diff --git a/Gruntfile.js b/Gruntfile.js index 9fc012ec1d..c1bf9a461a 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,4 +1,5 @@ /*global module:false*/ +var _ = require('lodash'); module.exports = function(grunt) { // Project configuration. @@ -19,82 +20,6 @@ module.exports = function(grunt) { build: ['build'] }, - uglify: { - buildApp: { - files: { - 'build/app.js': [ - 'public/bower_components/jquery/jquery.min.js', - 'public/bower_components/jquery.cookie/jquery.cookie.js', - 'public/bower_components/bootstrap-growl/jquery.bootstrap-growl.min.js', - 'public/bower_components/bootstrap-tour/build/js/bootstrap-tour.min.js', - 'public/bower_components/angular/angular.min.js', - 'public/bower_components/angular-sanitize/angular-sanitize.min.js', - 'public/bower_components/marked/lib/marked.js', - 'public/bower_components/angular-ui-router/release/angular-ui-router.js', - 'public/bower_components/angular-resource/angular-resource.min.js', - 'public/bower_components/angular-ui/build/angular-ui.min.js', - 'public/bower_components/angular-ui-utils/modules/keypress/keypress.js', - 'public/bower_components/angular-loading-bar/build/loading-bar.js', - // we'll remove this once angular-bootstrap is fixed - 'public/bower_components/bootstrap/docs/assets/js/bootstrap.min.js', - 'public/bower_components/angular-bootstrap/ui-bootstrap.min.js', - 'public/bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js', - // Sortable - 'public/bower_components/jquery-ui/ui/minified/jquery.ui.core.min.js', - 'public/bower_components/jquery-ui/ui/minified/jquery.ui.widget.min.js', - 'public/bower_components/jquery-ui/ui/minified/jquery.ui.mouse.min.js', - 'public/bower_components/jquery-ui/ui/minified/jquery.ui.sortable.min.js', - // habitrpg-shared - 'public/bower_components/habitrpg-shared/dist/habitrpg-shared.js', - // app - 'public/js/app.js', - 'public/js/services/authServices.js', - 'public/js/services/notificationServices.js', - 'public/js/services/sharedServices.js', - 'public/js/services/userServices.js', - 'public/js/services/groupServices.js', - 'public/js/services/memberServices.js', - 'public/js/services/guideServices.js', - 'public/js/services/challengeServices.js', - - 'public/js/filters/filters.js', - - 'public/js/directives/directives.js', - - 'public/js/controllers/authCtrl.js', - 'public/js/controllers/notificationCtrl.js', - 'public/js/controllers/rootCtrl.js', - 'public/js/controllers/settingsCtrl.js', - 'public/js/controllers/headerCtrl.js', - 'public/js/controllers/tasksCtrl.js', - 'public/js/controllers/filtersCtrl.js', - 'public/js/controllers/userCtrl.js', - 'public/js/controllers/groupsCtrl.js', - 'public/js/controllers/petsCtrl.js', - 'public/js/controllers/inventoryCtrl.js', - 'public/js/controllers/marketCtrl.js', - 'public/js/controllers/footerCtrl.js', - 'public/js/controllers/challengesCtrl.js' - ] - } - }, - buildStatic: { - files: { - 'build/static.js': [ - 'public/bower_components/jquery/jquery.min.js', - 'public/bower_components/habitrpg-shared/dist/habitrpg-shared.js', - 'public/bower_components/angular/angular.min.js', - 'public/bower_components/angular-resource/angular-resource.min.js', - 'public/bower_components/bootstrap/docs/assets/js/bootstrap.min.js', - 'public/bower_components/angular-loading-bar/build/loading-bar.js', - 'public/js/static.js', - 'public/js/services/userServices.js', - 'public/js/controllers/authCtrl.js' - ] - } - } - }, - stylus: { build: { options: { @@ -109,19 +34,6 @@ module.exports = function(grunt) { } }, - cssmin: { - build: { - files: { - 'build/app.css': ['build/app.css'], - 'build/static.css': ['build/static.css'], - 'build/bower_components/habitrpg-shared/dist/spritesheets.css': ['public/bower_components/habitrpg-shared/dist/spritesheets.css'], - 'build/bower_components/bootstrap/docs/assets/css/bootstrap.css': ['public/bower_components/bootstrap/docs/assets/css/bootstrap.css'], - 'build/bower_components/bootstrap/docs/assets/css/bootstrap-responsive.css': ['public/bower_components/bootstrap/docs/assets/css/bootstrap-responsive.css'], - 'build/bower_components/bootstrap/docs/assets/css/docs.css': ['public/bower_components/bootstrap/docs/assets/css/docs.css'] - } - } - }, - copy: { build: { files: [{expand: true, cwd: 'public/', src: 'favicon.ico', dest: 'build/'}] @@ -168,9 +80,31 @@ module.exports = function(grunt) { }); + //Load build files from public/manifest.json + grunt.registerTask('loadManifestFiles', 'Load all build files from public/manifest.json', function(){ + var files = grunt.file.readJSON('./public/manifest.json'); + var uglify = {}; + var cssmin = {}; + _.each(files, function(val, key){ + var js = uglify['build/' + key + '.js'] = []; + _.each(files[key]['js'], function(val){ + js.push('public/' + val); + }); + _.each(files[key]['css'], function(val){ + if(val == 'app.css' || val == 'static.css'){ + cssmin['build/' + val] = ['build/' + val] + }else{ + cssmin['build/' + val] = ['public/' + val] + } + }); + }); + grunt.config.set('uglify.build.files', uglify); + grunt.config.set('cssmin.build.files', cssmin); + }); + // Register tasks. - grunt.registerTask('build:prod', ['clean:build', 'uglify', 'stylus', 'cssmin', 'copy:build', 'hashres']); - grunt.registerTask('build:dev', ['clean:build', 'stylus', 'cssmin', 'copy:build', 'hashres']); + grunt.registerTask('build:prod', ['loadManifestFiles', 'clean:build', 'uglify', 'stylus', 'cssmin', 'copy:build', 'hashres']); + grunt.registerTask('build:dev', ['loadManifestFiles', 'clean:build', 'stylus', 'cssmin', 'copy:build']); grunt.registerTask('run:dev', [ 'build:dev', 'concurrent' ]); diff --git a/public/manifest.json b/public/manifest.json new file mode 100644 index 0000000000..f0c0806330 --- /dev/null +++ b/public/manifest.json @@ -0,0 +1,83 @@ +{ + "app": { + "js": [ + "bower_components/jquery/jquery.js", + "bower_components/bootstrap-growl/jquery.bootstrap-growl.js", + "bower_components/bootstrap-tour/build/js/bootstrap-tour.js", + "bower_components/angular/angular.js", + "bower_components/angular-sanitize/angular-sanitize.js", + "bower_components/marked/lib/marked.js", + "bower_components/angular-ui-router/release/angular-ui-router.js", + "bower_components/angular-resource/angular-resource.min.js", + "bower_components/angular-ui/build/angular-ui.js", + "bower_components/angular-ui-utils/modules/keypress/keypress.js", + "bower_components/angular-loading-bar/build/loading-bar.js", + + "bower_components/bootstrap/docs/assets/js/bootstrap.js", + "bower_components/angular-bootstrap/ui-bootstrap.js", + "bower_components/angular-bootstrap/ui-bootstrap-tpls.js", + + "bower_components/jquery-ui/ui/minified/jquery.ui.core.min.js", + "bower_components/jquery-ui/ui/minified/jquery.ui.widget.min.js", + "bower_components/jquery-ui/ui/minified/jquery.ui.mouse.min.js", + "bower_components/jquery-ui/ui/minified/jquery.ui.sortable.min.js", + + "bower_components/habitrpg-shared/dist/habitrpg-shared.js", + + "js/app.js", + "js/services/authServices.js", + "js/services/notificationServices.js", + "js/services/sharedServices.js", + "js/services/userServices.js", + "js/services/groupServices.js", + "js/services/memberServices.js", + "js/services/guideServices.js", + "js/services/challengeServices.js", + + "js/filters/filters.js", + + "js/directives/directives.js", + + "js/controllers/authCtrl.js", + "js/controllers/notificationCtrl.js", + "js/controllers/rootCtrl.js", + "js/controllers/settingsCtrl.js", + "js/controllers/headerCtrl.js", + "js/controllers/tasksCtrl.js", + "js/controllers/filtersCtrl.js", + "js/controllers/userCtrl.js", + "js/controllers/groupsCtrl.js", + "js/controllers/petsCtrl.js", + "js/controllers/inventoryCtrl.js", + "js/controllers/marketCtrl.js", + "js/controllers/footerCtrl.js", + "js/controllers/challengesCtrl.js" + ], + "css": [ + "bower_components/bootstrap/docs/assets/css/bootstrap.css", + "app.css", + "bower_components/habitrpg-shared/dist/spritesheets.css" + ] + }, + "static": { + "js": [ + "bower_components/jquery/jquery.js", + "bower_components/habitrpg-shared/dist/habitrpg-shared.js", + "bower_components/angular/angular.js", + + "bower_components/bootstrap/docs/assets/js/bootstrap.js", + + "bower_components/angular-loading-bar/build/loading-bar.js", + "js/static.js", + "js/services/userServices.js", + "js/controllers/authCtrl.js" + ], + "css": [ + "bower_components/bootstrap/docs/assets/css/bootstrap.css", + "bower_components/bootstrap/docs/assets/css/bootstrap-responsive.css", + "bower_components/bootstrap/docs/assets/css/docs.css", + + "static.css" + ] + } +} \ No newline at end of file diff --git a/src/middleware.js b/src/middleware.js index 2b224ab85f..3bb94e08d8 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -54,11 +54,37 @@ var walk = function(folder){ walk(path.join(__dirname, "/../build")); var getBuildUrl = function(url){ - if(buildFiles[url]) return buildFiles[url]; + console.log(url, buildFiles[url]) + if(buildFiles[url]) return '/' + buildFiles[url]; - return url; + return '/' + url; } +var manifestFiles = require("../public/manifest.json"); + +var getManifestFiles = function(page){ + var files = manifestFiles[page]; + + if(!files) throw new Error("Page not found!"); + + var css = ''; + + _.each(files.css, function(file){ + css += ''; + }); + + if(nconf.get('NODE_ENV') === 'production'){ + return css + ''; + }else{ + var results = css; + _.each(files.js, function(file){ + results += ''; + }); + return results; + } + +} + module.exports.locals = function(req, res, next) { res.locals.habitrpg = res.locals.habitrpg || {} _.defaults(res.locals.habitrpg, { @@ -67,6 +93,7 @@ module.exports.locals = function(req, res, next) { PAYPAL_MERCHANT: nconf.get('PAYPAL_MERCHANT'), IS_MOBILE: /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(req.header('User-Agent')), STRIPE_PUB_KEY: nconf.get('STRIPE_PUB_KEY'), + getManifestFiles: getManifestFiles, getBuildUrl: getBuildUrl }); next() diff --git a/src/server.js b/src/server.js index 3e9c36ebc1..6b9e4e11d6 100644 --- a/src/server.js +++ b/src/server.js @@ -101,8 +101,8 @@ app.use(passport.session()); app.use(app.router); -var oneYear = 31536000000; -app.use(express['static'](path.join(__dirname, "/../build"), { maxAge: oneYear })); +var maxAge = (nconf.get('NODE_ENV') === 'production') ? 31536000000 : 0; +app.use(express['static'](path.join(__dirname, "/../build"), { maxAge: maxAge })); app.use(express['static'](path.join(__dirname, "/../public"))); // development only diff --git a/views/index.jade b/views/index.jade index adec2bc655..733bdca2ae 100644 --- a/views/index.jade +++ b/views/index.jade @@ -4,7 +4,7 @@ html title HabitRPG | Your Life The Role Playing Game // ?v=1 needed to force refresh - link(rel='shortcut icon' href='/#{env.getBuildUrl("favicon.ico")}?v=2') + link(rel='shortcut icon' href='#{env.getBuildUrl("favicon.ico")}?v=2') script(type='text/javascript'). window.env = !{JSON.stringify(env)}; @@ -14,74 +14,7 @@ html display: none; } - // CSS Remember to update also in Grunfile.js cssmin task! - link(rel='stylesheet', href='/#{env.getBuildUrl("bower_components/bootstrap/docs/assets/css/bootstrap.css")}') - - link(rel='stylesheet', href='/#{env.getBuildUrl("app.css")}') - - // HabitRPG Shared - link(rel='stylesheet', href='/#{env.getBuildUrl("bower_components/habitrpg-shared/dist/spritesheets.css")}') - - - if(env.NODE_ENV == 'production'){ - script(type='text/javascript', src='/#{env.getBuildUrl("app.js")}') - - }else{ - // Remember to update the file list in Gruntfile.js! - script(type='text/javascript', src='/bower_components/jquery/jquery.min.js') - script(type='text/javascript', src='/bower_components/jquery.cookie/jquery.cookie.js') - script(type='text/javascript', src='/bower_components/bootstrap-growl/jquery.bootstrap-growl.min.js') - script(type='text/javascript', src='/bower_components/bootstrap-tour/build/js/bootstrap-tour.min.js') - script(type='text/javascript', src='/bower_components/angular/angular.js') - script(type='text/javascript', src='/bower_components/angular-ui-router/release/angular-ui-router.js') - - script(type='text/javascript', src='/bower_components/angular-sanitize/angular-sanitize.min.js') - script(type='text/javascript', src='/bower_components/marked/lib/marked.js') - - script(type='text/javascript', src='/bower_components/angular-resource/angular-resource.js') - script(type='text/javascript', src='/bower_components/angular-ui/build/angular-ui.js') - script(type='text/javascript', src='/bower_components/angular-ui-utils/modules/keypress/keypress.js') - - script(type='text/javascript', src='/bower_components/angular-loading-bar/build/loading-bar.js') - // we'll remove this once angular-bootstrap is fixed - script(type='text/javascript', src='/bower_components/bootstrap/docs/assets/js/bootstrap.min.js') - script(type='text/javascript', src='/bower_components/angular-bootstrap/ui-bootstrap.min.js') - script(type='text/javascript', src='/bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js') - // Sortable - script(type='text/javascript', src='/bower_components/jquery-ui/ui/minified/jquery.ui.core.min.js') - script(type='text/javascript', src='/bower_components/jquery-ui/ui/minified/jquery.ui.widget.min.js') - script(type='text/javascript', src='/bower_components/jquery-ui/ui/minified/jquery.ui.mouse.min.js') - script(type='text/javascript', src='/bower_components/jquery-ui/ui/minified/jquery.ui.sortable.min.js') - // habitrpg-shared - script(type='text/javascript', src='/bower_components/habitrpg-shared/dist/habitrpg-shared.js') - // app - script(type='text/javascript', src='/js/app.js') - script(type='text/javascript', src='/js/services/authServices.js') - script(type='text/javascript', src='/js/services/notificationServices.js') - script(type='text/javascript', src='/js/services/sharedServices.js') - script(type='text/javascript', src='/js/services/userServices.js') - script(type='text/javascript', src='/js/services/groupServices.js') - script(type='text/javascript', src='/js/services/memberServices.js') - script(type='text/javascript', src='/js/services/guideServices.js') - script(type='text/javascript', src='/js/services/challengeServices.js') - - script(type='text/javascript', src='/js/filters/filters.js') - - script(type='text/javascript', src='/js/directives/directives.js') - - script(type='text/javascript', src='/js/controllers/authCtrl.js') - script(type='text/javascript', src='/js/controllers/notificationCtrl.js') - script(type='text/javascript', src='/js/controllers/rootCtrl.js') - script(type='text/javascript', src='/js/controllers/settingsCtrl.js') - script(type='text/javascript', src='/js/controllers/headerCtrl.js') - script(type='text/javascript', src='/js/controllers/tasksCtrl.js') - script(type='text/javascript', src='/js/controllers/filtersCtrl.js') - script(type='text/javascript', src='/js/controllers/userCtrl.js') - script(type='text/javascript', src='/js/controllers/groupsCtrl.js') - script(type='text/javascript', src='/js/controllers/petsCtrl.js') - script(type='text/javascript', src='/js/controllers/inventoryCtrl.js') - script(type='text/javascript', src='/js/controllers/marketCtrl.js') - script(type='text/javascript', src='/js/controllers/footerCtrl.js') - script(type='text/javascript', src='/js/controllers/challengesCtrl.js') - -} + != env.getManifestFiles("app") //webfonts link(href='//fonts.googleapis.com/css?family=Lato:300,400,700,400italic,700italic', rel='stylesheet', type='text/css') diff --git a/views/static/layout.jade b/views/static/layout.jade index 29837f2e79..6d797f34e5 100644 --- a/views/static/layout.jade +++ b/views/static/layout.jade @@ -7,35 +7,12 @@ html block title title HabitRPG | Your Life the Role Playing Game - link(rel='shortcut icon', href='/#{env.getBuildUrl("favicon.ico")}?v=2') + link(rel='shortcut icon', href='#{env.getBuildUrl("favicon.ico")}?v=2') meta(charset='utf-8') meta(name='viewport', content='width=device-width, initial-scale=1.0') - // CSS Remember to update also in Grunfile.js cssmin task! - link(rel='stylesheet', href='/#{env.getBuildUrl("bower_components/bootstrap/docs/assets/css/bootstrap.css")}') - // Keep this out of build because the one after has some images and would like not to override it - link(rel='stylesheet', href='/#{env.getBuildUrl("bower_components/bootstrap/docs/assets/css/bootstrap-responsive.css")}') - link(rel='stylesheet', href='/#{env.getBuildUrl("bower_components/bootstrap/docs/assets/css/docs.css")}') - - link(rel='stylesheet', href='/#{env.getBuildUrl("static.css")}') - - // JS - - if(layoutEnv.NODE_ENV == 'production'){ - script(type='text/javascript', src='/#{env.getBuildUrl("static.js")}') - - }else{ - // Remember to update the file list in Gruntfile.js! - script(type='text/javascript', src='/bower_components/jquery/jquery.min.js') - script(type='text/javascript', src='/bower_components/habitrpg-shared/dist/habitrpg-shared.js') - script(type='text/javascript', src='/bower_components/angular/angular.min.js') - script(type='text/javascript', src='/bower_components/angular-resource/angular-resource.min.js') - script(type='text/javascript', src='/bower_components/bootstrap/docs/assets/js/bootstrap.min.js') - script(type='text/javascript', src='/bower_components/angular-loading-bar/build/loading-bar.js') - - script(type='text/javascript', src='/js/static.js') - script(type='text/javascript', src='/js/services/userServices.js') - script(type='text/javascript', src='/js/controllers/authCtrl.js') - -} + != env.getManifestFiles("static") script(type='text/javascript'). $.getScript("//s7.addthis.com/js/250/addthis_widget.js#pubid=lefnire");