123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- /*global module*/
- var webpackCfg = require('./webpack.config.js');
- module.exports = function (grunt) {
- 'use strict';
- // The banner on top of the build
- var banner = '/**\n' +
- ' * Open Sheet Music Display <%= pkg.version %> built on <%= grunt.template.today("yyyy-mm-dd") %>.\n' +
- ' * Copyright (c) 2016 PhonicScore\n' +
- ' *\n' +
- ' * https://github.com/opensheetmusicdisplay/opensheetmusicdisplay\n' +
- ' */\n',
- typings = [
- 'typings/index.d.ts',
- // Additional manual typings:
- 'external/vexflow/vexflow.d.ts'
- ];
- // Paths
- var src = ['src/**/*.ts'];
- var test = ['test/**/*.ts'];
- // Grunt configuration following:
- grunt.initConfig({
- pkg: grunt.file.readJSON('package.json'),
- banner: '',
- // Build output directories
- outputDir: {
- build: 'build',
- dist: 'dist'
- },
- // Browserify
- browserify: {
- dist: {
- src: ['src/OSMD/OSMD.ts'],
- dest: '<%= outputDir.build %>/osmd.js',
- options: {
- banner: '<%= banner %>',
- browserifyOptions: {
- standalone: 'opensheetmusicdisplay'
- }
- }
- },
- debug: {
- src: ['src/OSMD/OSMD.ts'],
- dest: '<%= outputDir.build %>/osmd-debug.js',
- options: {
- banner: '<%= banner %>',
- browserifyOptions: {
- debug: true,
- standalone: 'opensheetmusicdisplay'
- }
- }
- },
- test: {
- src: [].concat(typings, src, test),
- dest: '<%= outputDir.build %>/osmd-test.js',
- options: {
- banner: '<%= banner %>',
- browserifyOptions: {
- debug: true
- }
- }
- },
- options: {
- plugin: ['tsify']
- }
- },
- // Uglify
- uglify: {
- options: {
- compress: {
- 'drop_console': true
- },
- banner: banner,
- mangle: true,
- mangleProperties: true
- },
- bundle: {
- files: {
- 'build/osmd.min.js': ['build/osmd.js']
- }
- }
- },
- // Webpack
- webpack: {
- options: {
- progress: true,
- },
- build: webpackCfg,
- dev: Object.assign({ watch: true }, webpackCfg)
- },
- 'webpack-dev-server': {
- options: {
- webpack: webpackCfg
- },
- start: webpackCfg.devServer,
- },
- // Karma setup
- karma: {
- // For continuous integration
- ci: {
- configFile: 'karma.conf.js',
- options: {
- browsers: ['PhantomJS']
- }
- },
- firefox: {
- configFile: 'karma.conf.js',
- options: {
- singleRun: false,
- browsers: ['Firefox']
- }
- },
- chrome: {
- configFile: 'karma.conf.js',
- options: {
- singleRun: false,
- browsers: ['Chrome']
- }
- }
- },
- // Typescript compilation for ES6 module (npm package)
- ts: {
- default : {
- tsconfig: true
- }
- },
- // Cleaning task setup
- clean: {
- options: {
- force: true
- },
- all: {
- src: [
- '<%= outputDir.build %>',
- '<%= outputDir.dist %>',
- '.tscache',
- 'src/**/*.js', 'test/**/*.js' // if something went wrong, delete JS from TypeScript source directories
- ]
- }
- },
- copy: {
- demo: {
- files: [
- { src: ['*'], dest: '<%= outputDir.build %>/demo/sheets/', cwd: './test/data/', expand: true },
- { src: ['*.js', '*.css', '*.html', '*.ico'], cwd: './demo/', expand: true, dest: '<%= outputDir.build %>/demo/' },
- { src: ['osmd-debug.js'], cwd: './build/', expand: true, dest: '<%= outputDir.build %>/demo/' }
- ]
- }
- },
- // http-server
- 'http-server': {
- 'demo': {
- root: 'build/demo',
- port: 8000,
- host: '0.0.0.0',
- showDir : true,
- autoIndex: true,
- runInBackground: false,
- openBrowser : true
- }
- }
- });
- // Load npm tasks
- grunt.loadNpmTasks('grunt-browserify');
- grunt.loadNpmTasks('grunt-contrib-clean');
- grunt.loadNpmTasks('grunt-contrib-copy');
- grunt.loadNpmTasks('grunt-contrib-uglify');
- grunt.loadNpmTasks('grunt-contrib-watch');
- grunt.loadNpmTasks('grunt-http-server');
- grunt.loadNpmTasks('grunt-karma');
- grunt.loadNpmTasks('grunt-ts');
- grunt.loadNpmTasks('grunt-webpack');
- // Build tasks
- grunt.registerTask('build:demo', 'Builds the demo.', ['browserify:debug', 'copy:demo']);
- grunt.registerTask('build:test', 'Builds the tests', ['browserify:test']);
- grunt.registerTask('build:dist', 'Builds for distribution on npm and Bower.', ['browserify:dist', 'uglify', 'ts']);
- grunt.registerTask('build:pack', 'Builds using webpack', ['webpack:build', 'uglify']);
- // Tests
- grunt.registerTask('test', 'Runs unit, regression and e2e tests.', ['build:test', 'karma:ci']);
- // Webpack dev server
- grunt.registerTask('webpack-server', ['webpack-dev-server:start']);
- // Default task (if grunt is run without any argument, used in contiuous integration)
- grunt.registerTask('default', 'Default task, running all other tasks. (CI)', ['test', 'build:demo', 'build:dist']);
- };
|