Skip to content

Instantly share code, notes, and snippets.

@sangcu
Created August 27, 2014 17:16
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sangcu/dae8839772b99c17f898 to your computer and use it in GitHub Desktop.
Save sangcu/dae8839772b99c17f898 to your computer and use it in GitHub Desktop.
This is how I used build tool to develop the app
module.exports = function(grunt) {
grunt.initConfig({
htmlcompressor: {
compile: {
files: {
//'index.min.html': 'index.html',
'views/landing-min/landing.min.html': 'views/landing-default/landing.html',
'views/landing-min/main.min.js': 'views/landing-default/main.min.js'
},
options: {
type: 'html',
preserveServerScript: true
}
}
},
cssmin: {
minify: {
report:'gzip',
dest:'public/stylesheets/dist/plugins.min.css',
src:['public/stylesheets/dist/plugins.css']
}
},
copy: {
main: {
src: 'views/landing-default/bg.jpg',
dest: 'views/landing-min/bg.jpg',
},
},
uglify: {
options: {
compress: {
drop_console: true,
sequences : true, // join consecutive statemets with the “comma operator”
properties : true, // optimize property access: a["foo"] → a.foo
dead_code : true, // discard unreachable code
drop_debugger : true, // discard “debugger” statements
unsafe : false, // some unsafe optimizations (see below)
conditionals : true, // optimize if-s and conditional expressions
comparisons : true, // optimize comparisons
evaluate : true, // evaluate constant expressions
booleans : true, // optimize boolean expressions
loops : true, // optimize loops
unused : true, // drop unused variables/functions
hoist_funs : true, // hoist function declarations
hoist_vars : true, // hoist variable declarations
if_return : true, // optimize if-s followed by return/continue
join_vars : true, // join var declarations
cascade : true, // try to cascade `right` into `left` in sequences
side_effects : true, // drop side-effect-free statements
warnings : true // warn about potentially dangerous optimizations/code
}
},
my_target: {
files: [{
'public/javascripts/app/dist/app.min.js': ['public/javascripts/app/dist/models.js',
'public/javascripts/app/dist/views.js',
'public/javascripts/app/dist/controllers.js',
'public/javascripts/app/dist/routes.js',
'public/javascripts/app/dist/components.js'
],
'public/javascripts/dist/app.min.js':['public/javascripts/dist/app.js'],
'public/javascripts/dist/core.min.js':['public/javascripts/dist/core.js'],
'public/javascripts/app/dist/plugins.min.js':['public/javascripts/app/dist/plugins.js']
},{
'views/landing-default/main.min.js':['views/landing-default/jquery.countdown.js',
'views/landing-default/main.config.js','views/landing-default/sunrise.js']
}]
}
},
ember_handlebars: {
options: {
namespace: 'Ember.TEMPLATES',
processName: function(filePath) {
return filePath.replace('public/templates/', '').replace('.hbs', '');
},
compilerOptions: {
knownHelpers: {
"action":true,
"bind-attr":true,
"connectOutlet":true,
"debugger":true,
"disconnectOutlet":true,
"each":true,
"if":true,
"init":true,
"input":true,
"link-to":true,
"loc":true,
"log":true,
"outlet":true,
"partial":true,
"render":true,
"textarea":true,
"unbound":true,
"unless":true,
"view":true,
"with":true,
"yield":true
},
knownHelpersOnly: true
}
},
all: {
src: 'public/**/*.hbs',
dest: "public/javascripts/templates.js"
}
},
concat: {
options: {
separator: ';\r'
},
dev:{
files: {
'public/javascripts/app/dist/models.js': ['public/javascripts/app/models/*.js'],
'public/javascripts/app/dist/views.js': ['public/javascripts/app/views/*.js'],
'public/javascripts/app/dist/controllers.js': ['public/javascripts/app/controllers/*.js'],
'public/javascripts/app/dist/routes.js': ['public/javascripts/app/routes/*.js'],
'public/javascripts/app/dist/i18n/en/lang.js': ['public/javascripts/app/i18n/en/lang.js'],
'public/javascripts/app/dist/i18n/vn/lang.js': ['public/javascripts/app/i18n/vn/lang.js'],
'public/javascripts/app/dist/components.js': ['public/javascripts/app/components/*.js'],
'public/javascripts/app/dist/plugins.js': ['public/javascripts/plugins/momentjs/moment.min.js',
'public/javascripts/plugins/pace/pace.js',
'public/javascripts/plugins/jquery/jquery-1.10.2.min.js',
'public/javascripts/plugins/messenger/messenger.min.js',
'public/javascripts/plugins/messenger/messenger-theme-flat.js',
'public/javascripts/plugins/bootstrap-datepicker/bootstrap-datepicker.js',
'public/javascripts/plugins/epiceditor/epiceditor.js',
'public/javascripts/plugins/dropzone/dropzone.js',
'public/javascripts/plugins/codemirror/codemirror.js',
'public/javascripts/plugins/codemirror/htmlmixed.js',
'public/javascripts/plugins/bootstrap/bootstrap.min.js',
'public/javascripts/plugins/slimscroll/jquery.slimscroll.min.js',
'public/javascripts/plugins/videojs/video.js',
'public/javascripts/plugins/hisrc/hisrc.js'
],
'public/stylesheets/dist/plugins.css': ['public/stylesheets/plugins/pace/pace.css',
'public/stylesheets/plugins/bootstrap/css/bootstrap.min.css',
'public/stylesheets/plugins/messenger/messenger.css',
'public/stylesheets/plugins/messenger/messenger-theme-flat.css',
'public/stylesheets/plugins.css',
'public/stylesheets/animate.css',
'public/stylesheets/demo.css',
'public/stylesheets/plugins/videojs/style.css',
'public/stylesheets/plugins/dateedit/datepicker3.css',
'public/stylesheets/plugins/dropzone/css/dropzone.css',
'public/javascripts/plugins/codemirror/codemirror.css',
'public/stylesheets/style.css'
],
'public/javascripts/dist/core.js': ['public/javascripts/handlebars/handlebars.js',
'public/javascripts/ember/ember.js',
'public/javascripts/ember-data/ember-data.js',
'public/javascripts/app.js',
'public/javascripts/app/helpers/transform.js',
'public/javascripts/app/helpers/ember_helper.js'
],
'public/javascripts/dist/app.js': ['public/javascripts/templates.js',
'public/javascripts/app/dist/components.js',
'public/javascripts/app/dist/models.js',
'public/javascripts/app/dist/views.js',
'public/javascripts/app/dist/controllers.js',
'public/javascripts/app/dist/routes.js',
]
}
},
prod:{
files: {
'public/javascripts/dist/core.js': ['public/javascripts/handlebars/handlebars.js',
'public/javascripts/ember/ember.prod.js',
'public/javascripts/ember-data/ember-data.prod.js',
'public/javascripts/app.js',
'public/javascripts/app/helpers/transform.js',
'public/javascripts/app/helpers/ember_helper.js'
]
}
}
},
watch: {
configFiles: {
files: [ 'Gruntfile.js', 'public/javascripts/app/helpers/*.js','public/javascripts/app/components/*.js','public/javascripts/app/models/*.js','public/javascripts/app/views/*.js','public/javascripts/app/controllers/*.js','public/javascripts/app/routes/*.js','public/javascripts/app/i18n/**/*.js','public/**/*.hbs','public/javascripts/**/*.css' ],
options: {
reload: true
},
tasks:['ember_handlebars','concat','htmlcompressor','cssmin','copy']
}
}
});
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-ember-handlebars');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-htmlcompressor');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.registerTask('production', ['ember_handlebars','concat','uglify','htmlcompressor','cssmin','copy']);
grunt.registerTask('default', ['ember_handlebars','concat:dev','htmlcompressor','cssmin','copy']);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment