You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
3.0 KiB
JavaScript
129 lines
3.0 KiB
JavaScript
|
1 month ago
|
'use strict';
|
||
|
|
|
||
|
|
module.exports = function (grunt) {
|
||
|
|
// Add require for connect-modewrite
|
||
|
|
var modRewrite = require('connect-modrewrite');
|
||
|
|
|
||
|
|
// Define the configuration for all the tasks
|
||
|
|
grunt.initConfig({
|
||
|
|
// Project settings
|
||
|
|
app: './app',
|
||
|
|
demo: './docs',
|
||
|
|
|
||
|
|
// Watches files for changes and runs tasks based on the changed files
|
||
|
|
watch: {
|
||
|
|
js: {
|
||
|
|
files: ['<%= app %>/js/{,*/}*.js', '<%= demo %>/{,*/}*.js'],
|
||
|
|
|
||
|
|
options: {
|
||
|
|
livereload: true
|
||
|
|
}
|
||
|
|
},
|
||
|
|
styles: {
|
||
|
|
files: ['<%= app %>/css/{,*/}*.css'],
|
||
|
|
options: {
|
||
|
|
livereload: true
|
||
|
|
}
|
||
|
|
},
|
||
|
|
gruntfile: {
|
||
|
|
files: ['Gruntfile.js']
|
||
|
|
},
|
||
|
|
livereload: {
|
||
|
|
options: {
|
||
|
|
livereload: '<%= connect.options.livereload %>'
|
||
|
|
},
|
||
|
|
files: [
|
||
|
|
'<%= app %>/{,*/}*.html',
|
||
|
|
'<%= app %>/img/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
|
||
|
|
]
|
||
|
|
}
|
||
|
|
},
|
||
|
|
// The actual grunt server settings
|
||
|
|
connect: {
|
||
|
|
options: {
|
||
|
|
port: 9000,
|
||
|
|
// Change this to '0.0.0.0' to access the server from outside.
|
||
|
|
hostname: 'localhost',
|
||
|
|
livereload: 35729,
|
||
|
|
base: ['./dist',
|
||
|
|
'<%= app %>',
|
||
|
|
'<%= demo %>']
|
||
|
|
|
||
|
|
},
|
||
|
|
livereload: {
|
||
|
|
options: {
|
||
|
|
open: 'http://localhost:<%= connect.options.port %>',
|
||
|
|
base: [
|
||
|
|
'.tmp',
|
||
|
|
'<%= app %>',
|
||
|
|
'<%= demo %>'
|
||
|
|
],
|
||
|
|
// MODIFIED: Add this middleware configuration
|
||
|
|
middleware: function (connect, options) {
|
||
|
|
var middlewares = [];
|
||
|
|
|
||
|
|
middlewares.push(modRewrite(['^[^\\.]*$ /index.html [L]'])); //Matches everything that does not contain a '.' (period)
|
||
|
|
options.base.forEach(function (base) {
|
||
|
|
middlewares.push(connect.static(base));
|
||
|
|
});
|
||
|
|
return middlewares;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
},
|
||
|
|
concat: {
|
||
|
|
dist: {
|
||
|
|
src: ['<%= app %>/js/**/*.js'],
|
||
|
|
dest: 'dist/ruler.js'
|
||
|
|
}
|
||
|
|
},
|
||
|
|
cssmin: {
|
||
|
|
dist: {
|
||
|
|
files: [{
|
||
|
|
expand: true,
|
||
|
|
cwd: '<%= app %>/css/',
|
||
|
|
src: ['*.css', '!*.min.css'],
|
||
|
|
dest: 'dist',
|
||
|
|
ext: '.min.css'
|
||
|
|
}]
|
||
|
|
}
|
||
|
|
},
|
||
|
|
uglify: {
|
||
|
|
dist: {
|
||
|
|
files: {
|
||
|
|
'dist/ruler.min.js': ['dist/ruler.js']
|
||
|
|
}
|
||
|
|
}
|
||
|
|
},
|
||
|
|
copy: {
|
||
|
|
main: {
|
||
|
|
files: [
|
||
|
|
// includes files within path
|
||
|
|
{expand: true, src: ['./dist/*'], dest: '<%= demo %>', filter: 'isFile'},
|
||
|
|
]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
});
|
||
|
|
// Load tasks
|
||
|
|
grunt.loadNpmTasks('grunt-contrib-connect');
|
||
|
|
grunt.loadNpmTasks('grunt-bower-install');
|
||
|
|
grunt.loadNpmTasks('grunt-express');
|
||
|
|
grunt.loadNpmTasks('grunt-shell');
|
||
|
|
grunt.loadNpmTasks('grunt-contrib-concat');
|
||
|
|
grunt.loadNpmTasks('grunt-contrib-cssmin');
|
||
|
|
grunt.loadNpmTasks('grunt-contrib-copy');
|
||
|
|
grunt.loadNpmTasks('grunt-contrib-uglify');
|
||
|
|
|
||
|
|
|
||
|
|
grunt.registerTask('build', [
|
||
|
|
'concat',
|
||
|
|
'cssmin',
|
||
|
|
'uglify',
|
||
|
|
'copy'
|
||
|
|
]);
|
||
|
|
|
||
|
|
// Register new tasks
|
||
|
|
grunt.registerTask('serve', ['build', 'connect', 'watch']);
|
||
|
|
}
|