Get current version of node: $ nodejs -v or $ node -v
According to nodesource:
$ curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
$ sudo apt install -y nodejs
Get current version of node: $ nodejs -v or $ node -v
According to nodesource:
$ curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
$ sudo apt install -y nodejs
os: linux mint 17.2
$ nodejs -v => v0.10.25 $ node -v => v0.10.25 $ npm -v => 1.3.10
$ nvm ls => list available/installed local nodejs-versions $ nvm ls-remote => see what versions are available to install $ nvm install v4.2.1 => install und use specific nodejs-version
$ nvm use system => switch to system-version
links:
nvm
Grunt erleichtert definitiv die Entwicklungsarbeit. Aber wie benutze ich es?
Grunt ist abhängig von node.js bzw. dessen Paketmanager npm. Diese müssen folglich vorher installiert sein.
Im Projektverzeichnis sollte eine Datei package.json vorhanden sein:
{ "name": "myTool", "description": "describe the tool" }
Danach kann Grunt für das Projekt installiert bzw. aktiviert werden:
$ npm install grunt --save-dev
Dadurch wird neues Verzeichnis node_modules im Projektverzeichnis erstellt und Grunt kann benutzt werden. Die Option –save-dev ergänzt/erweitert die devDependencies in package.json um grunt. Analog für verwendete Grunt-Plugins gilt:
$ npm install grunt-contrib-concat --save-dev $ npm install grunt-contrib-cssmin --save-dev $ npm install grunt-contrib-uglify --save-dev $ npm install grunt-contrib-watch --save-dev
Anschließend sind auch die installierten Plugins einsatzbereit, bspw.
$ grunt watch
Die Konfigurationsdatei Gruntfile.js sieht in etwa so aus:
// Creating a wrapper module.exports = function(grunt){ // Initializing configuration objects grunt.initConfig({ // Reading 'package.json' so that we can use setting given there pkg : grunt.file.readJSON('package.json'), // specifying the settings for css file minification cssmin : { backend : { expand : true, cwd : 'web/verwaltung/css/', src : [ '*.css', '!*.min.css' ], dest : 'web/verwaltung/css/', ext : '.min.css' }, frontend : { expand : true, cwd : 'web/styles/', src : [ '*.css', '!*.min.css' ], dest : 'web/styles/', ext : '.min.css' }, options: { banner: '/*! <%= pkg.name %> - <%= grunt.template.today("yyyy-mm-dd H:M") %> */' } }, // specifying the settings for js file minification uglify : { backend: { files: { 'web/verwaltung/js/be.min.js': ['web/js/jquery.jnotify.js','web/js/shared/dialog-service.js','web/verwaltung/js/app.js'] } }, frontendApp: { files: { 'web/js/app.min.js': ['web/js/jquery.jnotify.js','web/js/shared/dialog-service.js','web/js/snv.js'] } }, frontendNgGrid: { files: { 'web/js/angular-gridster.min.js': ['web/js/angular-gridster.js'] } }, options: { banner: '/*! <%= pkg.name %> - <%= grunt.template.today("yyyy-mm-dd H:M") %> */' } }, // @see http://www.thegeekstuff.com/2014/10/grunt-contrib-watch-automate/ watch: { backend: { files: ['web/verwaltung/css/*.css','web/verwaltung/js/*.js'], tasks: ['minifyBE'], options: { spawn:false, event:['all'] } }, frontend: { files: ['web/styles/*.css','web/js/*.js'], tasks: ['minifyFE'], options: { spawn:false, event:['all'] } } } }); // Loading grunt-packages grunt.loadNpmTasks('grunt-contrib-cssmin'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-watch'); // Registering tasks grunt.registerTask( 'minifyBE', [ 'cssmin:backend', 'uglify:backend' ] ); grunt.registerTask( 'minifyFE', [ 'cssmin:frontend', 'uglify:frontendApp', 'uglify:frontendNgGrid' ] ); }
Die mit registerTask() hinterlegten Aufgaben können mittels Konsole auch separat gestartet werden:
$ grunt minifyBE